Q:为什么引入抽象类?
A:父类方法的不确定性
class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
//eat方法动物都有,但不知道什么动物,在这里还要写,真是麻烦
public void eat(){
System.out.println("这是一个动物,但不知道吃什么");
}
}
- 问题:在这里,动物类有一个
eat()
方法,但不知道下面的子类要怎么写,写在父类又没啥用,没有任何意义,子类还要重写。 - 解决方法:将该方法写为抽象方法,即没有实现的方法(没有方法体)
抽象代码格式:
//由于有抽象方法,类需要声明为抽象类
abstract class Animal {
private String name;
private int age;
public Animal(String name, int age) {
super();
this.name = name;
this.age = age;
}
//声明为抽象方法
public abstract void eat();
}
抽象类被继承,由子类来实现抽象方法
抽象类意义:
- 抽象类的价值更多作用时在于设计,是设计者设计好后,让子类继承并实现抽象类
注意点:
- 抽象类不能实例化
- 抽象类不一定含有抽象方法
- 抽象类还可以实现方法
- 抽象类本质还是类,可以有任意成员
- 抽象方法不能有主体
- 如果一个类继承了一个抽象类,那么必须实现全部抽象方法,或者继续声明为抽象类
- 抽象方法不能用private、final、static修饰,因为这些关键字与重写概念相违背