抽象类
定义
在类的继承中,如果一个个新的子类被定义,子类变得越来越具体,父类变得更加一般和通用,类的设计应该保证父子类能够共享特征,有时将父类设计得非常抽象,使得父类没有具体的实例,这样的类叫做抽象类;一般当我们设计一个类,不需要创建此类的实例时,可以考虑将该类设置成抽象类,让其子类实现这个类的抽象方法。
特征
- 不可被实例化
- 抽象类是有构造器的(其实所有的类都有构造器)
- 抽象方法所在的类一定是抽象类(因为抽象类是没有方法体的,如果所在的类不是抽象类,那么该类可以实例化对象)
- 抽象类可以没有抽象方法
//抽象类
abstract class Person {
String name;
public Person(){}//抽象类的构造方法
public abstract void dink();//抽象方法,无{}方法体
public void eat(){ //非抽象方法
};
}
class Student extends Person{
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void dink() {
System.out.println("喝水");
}
}
抽象方法
abstract修饰的即为抽象方法
特征
- 格式,没有方法体,包括{ },例如
public abstract void drink();
- 抽象方法只保留方法的功能,具体的执行,交给继承抽象类的子类,由子类重写该抽象方法
- 如果子类继承抽象类,并重写了父类的所有的抽象方法,则此子类不是抽象类,可以实例化。
- 如果子类继承抽象类,没有重写父类中所有的抽象方法,意味着子类中还有抽象方法,那么此子类必须必须声明为抽象的。