抽象概念:
当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!
- 抽象方法 : 没有方法体的方法。
- 抽象类:包含抽象方法的类。
抽象类特点:
- 抽象类和抽象方法必须使用
abstract
关键字修饰- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 抽象类不能实例化
- 抽象类可以有构造方法
- 抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类(无意义,因为不能创建对象,还要再找个子类创建对象…)
abstract:
abstract是抽象的意思,用于修饰方法和类,修饰的方法是抽象方法,修饰的类是抽象类。
抽象方法:
将共性的方法,抽取到父类,但是无法具体明确,就把方法定义为抽象方法,比如,狗和猫都需要吃饭,但是吃的东西不一样,那就把吃在父类中定义为抽象方法,狗继承后写为吃狗粮,猫继承后写为吃猫粮。
抽象类:
如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。
定义格式:
//抽象类的定义public abstract class 类名 {}//抽象方法的定义public abstract void eat();
演示:
// 定义父类
public abstract class Person {
// 定义抽象方法abstract void eat();
}class Zi extends Person{@Overridevoid eat() {System.out.println("我重写了父类的吃方法");}}
// 测试类public static void main(String[] args) {Zi zi = new Zi();zi.eat();System.out.println(zi);}
抽象类的注意事项:
- 抽象类不能创建对象
假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
- 可以有构造器
子类的构造方法中,有默认的super(),需要访问父类构造方法。子类继承父类不会报错
- 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想
模板中不能决定的东西定义成抽象方法,让使用模板(继承抽象类)的类去重写抽象方法实现需求,这是典型的模板思想。
抽象类总结
抽象类的特征总结起来可以说是有得有失
- 有得:抽象类得到了拥有抽象方法的能力。
- 有失:抽象类失去了创建对象的能力。 其他成员(构造器,实例方法,静态方法等)抽象类都是具备的。