9.JAVA-抽象类定义
生活随笔
收集整理的這篇文章主要介紹了
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-接口、工廠模式、代理模式、詳解
?
轉載于:https://www.cnblogs.com/lifexy/p/10826817.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的9.JAVA-抽象类定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: microsoft 官方学习资源
- 下一篇: Java高级部分