抽象类和抽象方法:
一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。我们使用abstract关键字来定义抽象类,使用abstract关键字定义的方法称为抽象方法,实际上抽象类除了被继承之外没有任何意义,抽象类中的某些行为在没有特定的运行时不会有任何的意义,抽象的类代表此类必须要被extend过,抽象的方法代表此方法一定要被覆盖过。
抽象的方法没有实体:
public abstract void eat();//没有方法体,直接以分号结束
如果声明出一个抽象的方法,就必须将类也标记为抽象的。你不能在非抽象类中拥有抽象方法。就算只有一个抽象的方法,此类也必须标记为抽象的。
实现抽象类:实现抽象的方法就如同覆盖过方法一样。抽象的方法没有内容,它只是为了标记出多态而存在。这表示在继承树结构下的第一个具体类(不是抽象的类就被称为具体类,比如创建一个Dog的抽象类,那就可以有金毛、贵宾、哈士奇等具体类)必须要实现出所有的抽象方法。
1 abstract class Animal { 2 String name; 3 String food; 4 5 public abstract void eat(); 6 public abstract void voice(); 7 } 8 9 abstract class Canine extends Animal { 10 public void eat() { 11 System.out.println("犬类动物在吃东西!"); 12 } 13 } 14 15 public class Dog extends Canine { 16 public void voice() { 17 System.out.println("汪汪汪!"); 18 } 19 public static void main(String[] args) { 20 Dog dog1 = new Dog(); 21 dog1.eat(); 22 dog1.voice(); 23 } 24 }
上面的例子,首先定义了一个抽象的Animal类,类中又定义了两个抽象的方法,因为是抽象的方法,可以不对它们进行实例化,第二个抽象类继承了Animal抽象类的一个方法,因为Canine也是抽象类,可以实例化也可以不实例化,第三个Dog类又继承了Canine类,但它是public型,即非具体类必须实现所有的抽象方法,而在Canine类中已经实现了eat()方法,在Dog类中就不必多此一举了。