抽象类与抽象方法

随着继承层次中一个个新子类的定义,类变得越来越具体,而父类更一般,更通用。类的设计应该保持父类和子类能共享特性。有时将父类设计的

非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。


abstract关键字的使用:

1、abstract可以修饰的结构:类、方法

2、abstract修饰类:

  1. ①此类不可实例化
  2. ②抽象类中一定有构造器,便于子类实例化时调用(涉及:子类实例化的全过程)
  3. ③开发中都会提供抽象类的子类,让子类对象实例化,完成相关操作

3、abstract修饰方法:例:

  1. public void abstract eat();
  1. ①抽象方法只有方法的声明,没有方法体
  2. ②包含抽象方法的类,一定是一个抽象类
  3. ③若子类中重写了父类所有的抽象方法后,此子类方可实例化
  4. 若子类中没有重写父类中(包括间接父类)所有的抽象方法,则此子类也是一个抽象类,需要用abstract修饰

image.png

abstract使用的注意点:

  1. 1abstract不能用来修饰:属性、构造器等结构
  2. 2abstract不能用来修饰私有方法、静态方法、final的方法、final的类

匿名对象和抽象类的匿名子类对象:例:

  1. public static void mian(String[] args){
  2. method(new Student( ) );//匿名对象
  3. Worker worker=new Worker();
  4. method1(worker);//非匿名的类非匿名的对象
  5. method1(new Worker( ) );//非匿名的匿名的对象
  6. //创建了一匿名子类的对象:p
  7. Person p=new Person(){
  8. public void eat(){
  9. }
  10. public void breath(){
  11. }
  12. }
  13. }
  14. public static void method1(Person p){
  15. p.eat();
  16. p.walk();
  17. }
  18. public static void method(Student s){
  19. }

image.png