抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现。具体来说,抽象类的使用有以下几点要注意:
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.
那么初步的抽象类的使用就是这样了,具体的细节还需要去多看书多实践。