抽象類是從多個具體類中抽象出來的父類,它具有更高層次的抽象。抽象類體現的就是一種模板模式的設計,抽象父類可以只定義需要使用的某些方法,把不能實現的某些部分抽象成抽象方法,留給其子類去實現。具體來說,抽象類的使用有以下幾點要注意:
1.抽象方法和抽象類必須使用abstract來修飾,其中抽象方法不能有方法體。
2.抽象類不能被實例化。
3.抽象類可以包含成員變量,方法(普通方法或抽象方法),構造器(抽象類的構造器不能用於創建實例,主要是被其子類調用),初始化塊,內部類(接口,枚舉)這五種成分。
4.含有抽象方法的類只能定義成抽象類,而抽象類中可以沒有抽象方法。
下面看具體的使用例子:
// 先在文件Animal.java 中定義一個抽象類 package animal; public abstract class Animal { public String name; public Animal(String name) { this.name = name; } public abstract void eat(); public abstract void move(); }
然后分別定義三個子類來實現這個抽象父類:
package animal; public class Dog extends Animal { public Dog(String name) { super(name); } public void eat() { System.out.println(name + " eat meat and grass."); } public void move() { System.out.println(name + " move with legs."); } } package animal; public class Bird extends Animal { public Bird(String name) { super(name); } public void eat() { System.out.println(name + " eat insect."); } public void move() { System.out.println(name + " move with wings."); } } package animal; public class Fish extends Animal { public Fish(String name) { super(name); } public void eat() { System.out.println(name + " eat algae."); } public void move() { System.out.println(name + " move with tail."); } }
可以看到三個子類繼承了父類的一個成員變量name, 並且分別實現了兩個抽象方法 eat() 和 move(). 然后我們定義一個測試類,並運行結果:
package animal; public class Summary { public static void main(String[] args) { Dog animal1 = new Dog("Shepherd"); Bird animal2 = new Bird("Sparrow"); Fish animal3 = new Fish("carp"); System.out.println(animal1.name); animal1.eat(); animal1.move(); System.out.println(animal2.name); animal2.eat(); animal2.move(); System.out.println(animal3.name); animal3.eat(); animal3.move(); } } 運行結果如下: Shepherd Shepherd eat meat and grass. Shepherd move with legs. Sparrow Sparrow eat insect. Sparrow move with wings. carp carp eat algae. carp move with tail.
那么初步的抽象類的使用就是這樣了,具體的細節還需要去多看書多實踐。