9.JAVA-抽象類定義


1.抽象類

  • 抽象類,用來表示一個抽象概念.
  • 是一種只能定義類型,而不能產生對象的類,所以定義了抽象類則必須有子類的出現.
  • 抽象類的好處在於能夠明確地定義子類需要覆寫的方法
  • 抽象類需要使用abstract聲明.
  • 抽象類里可以實現抽象方法,該方法特征在於:只有聲明,並沒有方法體(所以子類必須全部覆寫,並且子類不能為抽象類)

 

比如圖形(Shape)類, 就是一個抽象的概念,因為我們無法計算這個“圖形”的面積,所以它的成員函數area()是空的。

而繼承它的子類(矩形,橢圓形,三角形等)就可以去覆寫area()成員函數. 里面通過數學公式,計算出面積.

參考圖形(Shape)類,代碼如下:

abstract class Shape       //抽象的圖形類
{
         abstract public double area();        //abstract修飾的方法為抽象方法,無需實現方法體.但是必須被子類覆寫
}

class Ellipse extends Shape    //橢圓類
{

         private double wr;  //橢圓的半徑寬度
         private double hr;  //橢圓的半徑高度

         public Ellipse(double wr,double hr)
         {
                  this.wr = wr;
                  this.hr = hr;
         }


         public double area(){
                  return 3.14159*wr*hr;
         }
}


public class Test{

         public static void main(String args[])
         {
                  //Shape s = new Shape();                //如果定義抽象類,則將會報錯

                  Ellipse e = new Ellipse(2.5,1);
                  System.out.println("Ellipse area = "+e.area());
         }
}

 

需要注意的是:

  • 抽象類可以存在構造方法,用來初始化抽象類的屬性,
  • 抽象類不能使用final定義,

 

 

2.抽象內部類定義

在java中,如果我們抽象類的子類只有一個的話,則可以將它封裝為抽象內部類里,從而為用戶隱藏了這個無需知道的類.在類庫中很常見.

示例如下:

abstract class A       //抽象類
{

         abstract public void printData();//abstract修飾的方法為抽象方法,無需實現方法體.但是必須被子類覆寫
static private class B extends A //需要在抽象類里隱藏的內部類 { private int Data=12; public void printData() { System.out.println("B Data:"+this.Data); //打印內部類的Data值 } } static public A getInstance() //獲取實例 { return new B(); //通過靜態方法來獲取要隱藏的靜態抽象內部類 (靜態方法里只能使用靜態變量) } } public class Test{ public static void main(String args[]) { A a = A.getInstance(); a.printData(); //等價於: A.getInstance().printData(); } }

打印如下:

 

 

抽象類缺點:

  • 由於Java的單繼承,每個類只能從一個抽象類繼承.沒有接口靈活.

 

下章學習: 10.JAVA-接口、工廠模式、代理模式、詳解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM