抽象類是指在類中定義方法,但是並不去實現它,而在它的子類中去具體的實現。定義的抽象方法不過是一個方法占位符。繼承抽象類的子類必須實現父類的抽象方法,除非子類也被定義成一個抽象類
抽象類定義格式:
修飾符 abstract 類名 { }
抽象類方法定義格式:
修飾符 abstract 返回值類型 方法名();
注意:抽象類中的方法不一定為抽象方法,但是抽象方法所在的類一定要定義為抽象類。
public abstract class Animal { abstract void breath(); } public class Tiger extends Animal { void breath() { System.out.println("老虎用肺呼吸"); } } public class Fish extends Animal { void breath() { System.out.println("魚用腮呼吸"); } } public class Test { public static void main(String[] args) { Tiger tiger = new Tiger(); Fish fish = new Fish(); tiger.breath(); fish.breath(); } }
定義完抽象類后,就可以使用它。但是抽象類和普通類不同,抽象類不可以實例化,是無法通過編譯的,但是可以創建抽象類的對象變量,只是這個變量只能用來指向它的非抽象子類對象。
public static void main(String[] args) { // 抽象類不可實例化,錯誤 //Animal animal = new Animal(); // 可以創建抽象類的對象來指向非抽象類,正確 Animal animal = new Fish(); animal.breath(); } }
盡管animal 存放的是Fish 對象,但是不能直接調用這些子類中獨有的方法,調用獨有方法的時候需要進行類型轉換。
public class Test { public static void main(String[] args) { Animal animal = new Fish(); animal.breath(); ((Fish) animal).eat(); } }
