Day60 Java面向对象15 abstract关键字详解
Day60 Java面向对象15 abstract关键字详解
1.抽象类
- abstract修饰的类就是抽象类
- 抽象类无法被new创建对象实例,只能被继承
- 抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类
(抽象类中可以有正常方法)
2.抽象方法
- abstract修饰的方法就是抽象方法
- 抽象方法只有方法头,没有方法体。方法体要交给子类重写
子类必须重写父类的抽象方法,除非子类也为抽象类
3.抽象类和抽象方法的本质是:约束
4.理解
abstract class Animals {abstrcat void makesound();void sleep(){System.out.println("睡觉了");}
}
class Dog extends Animals {@overridevoid makesound(){System.out.println("汪汪汪");}
}
因为不存在“动物”这种动物,父类为Animals定义为抽象类,禁止其去创建实例。仅作为“动物”这种约束去让子类继承。
子类Dog,狗是正真实存在的一种动物(也可以继续把Dog作为抽象类,继续向下约束,再扩展为泰迪,秋田…等)
因为每种动物叫声不一样,所以在Animals中定义一种抽象方法,仅作为“叫”这么行为的约束,具体怎么叫(汪汪汪,还是 喵喵喵)交给继承这个抽象方法的子类去重写。
而sleep睡觉,每种动物的睡觉的行为都一样,所以可以在抽象类中直接定义普通的方法sleep,作为公共逻辑,子类也没有必要去重写这种公共的方法。