33_抽象類
第三十三章 抽象類
作者:張子默
一、概述
1、由來
父類中的方法,被它的子類們重寫,子類各自的實現都不盡相同。那麼父類的方法宣告和方法主體,只有宣告還有意義,而方法主體則沒有存在的意義了。我們把沒有方法主體的方法稱為抽象方法。Java語法規定,包含抽象方法的類就是抽象類。
2、定義
- 抽象方法:沒有方法體的方法。
- 抽象類:包含抽象方法的類。
二、abstract使用格式
1、抽象方法
使用abstract
關鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體。
定義格式:
修飾符 abstract 返回值型別 方法名(引數列表);
程式碼舉例:
public abstract void run();
2、抽象類
如果一個類包含抽象方法,那麼該類必須是抽象類。
定義格式:
abstract class 類名字{
}
程式碼舉例:
public abstract class Animal {
public abstract void run();
}
3、抽象的使用
繼承抽象類的子類必須重寫父類所有的抽象方法。否則,該子類也必須宣告為抽象類。最終,必須有子類實現該父類的抽象方法,否則,從最初的父類到最終的子類都不能建立物件,失去意義。
程式碼舉例:
public class Cat extends Animal {
public void run (){
System.out.println("小貓在牆頭走~~~");
}
}
public class CatTest {
public static void main(String[] args) {
// 建立子類物件
Cat c = new Cat();
// 呼叫run方法
c.run();
}
}
輸出結果:
小貓在牆頭走~~~
此時的方法重寫,是子類對父類抽象方法的完成實現,我們將這種方法重寫的操作,也叫作實現方法。
三、注意事項
關於抽象類的使用,以下為語法上要注意的細節,雖然條目較多,但若理解了抽象的本質,無需死記硬背。
-
抽象類不能建立物件,如果建立,編譯無法通過而報錯。只能建立其非抽象子類的物件。
理解:假設建立了抽象類的物件,呼叫抽象的方法,而抽象方法沒有具體的方法體,沒有意義。
-
抽象類中,可以有構造方法,是供子類建立物件時,初始化父類成員使用的。
理解:子類的構造方法中,有預設的super(),需要訪問父類構造方法。
-
抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
理解:未包含抽象方法的抽象類,目的就是不想讓呼叫者建立該類物件,通常用於某些特殊的類結構設計。
-
抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則,編譯無法通過而報錯。除非該子類也是抽象類。
理解:假設不重寫所有的抽象方法,則類中可能包含抽象方法。那麼建立物件後,呼叫抽象的方法,沒有意義。
相關文章
- 抽象方法和抽象類抽象
- 抽象類抽象
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- Java 抽象類Java抽象
- 14、抽象類抽象
- Python抽象類Python抽象
- 21-抽象類抽象
- 抽象類和介面抽象
- 抽象類與介面抽象
- 8 python 抽象類Python抽象
- TypeScript abstract 抽象類TypeScript抽象
- 抽象類VS介面抽象
- 介面的行為抽象和抽象類的行為抽象抽象
- 抽象類 & 介面比較抽象
- Java的抽象類 & 介面Java抽象
- Python抽象基類abcPython抽象
- 多型和抽象類多型抽象
- 介面和抽象類 (abstract)抽象
- 淺談Java抽象類Java抽象
- 介面和抽象類詳解抽象
- JAVA物件導向--抽象類Java物件抽象
- C++ 抽象類快速使用C++抽象
- 抽象類及介面詳解抽象
- java中抽象類和介面Java抽象
- Java —— 流的抽象基類Java抽象
- Java 的抽象類, 介面以及內部類Java抽象
- 介面、抽象類、普通類之間的關係抽象
- c#抽象類的定義C#抽象
- Java抽象類和介面 小白版Java抽象
- 介面和抽象類的區別抽象
- 大資料學習:抽象類大資料抽象
- Dart - 抽象類的例項化Dart抽象
- java中的抽象類與介面Java抽象
- Java的抽象類與介面理解Java抽象
- Java之繼承和抽象類Java繼承抽象
- Java總結-抽象類與介面Java抽象
- Java基礎-抽象類和介面Java抽象
- 抽象類練習_學生與工人抽象