1. abstract关键字的使用

  • abstract:抽象的
  • abstract可以用来修饰的结构:类、方法
  • abstract修饰类:抽象类
     *      > 此类不能实例化。abstract通常用来修饰一个父类,该父类有丰富的子类,子类又是父类功能的拓展,所以不再需要该父类来new对象,只需要选择其一子类来构造对象即可。
     *      > 抽象类中一定有构造器,便于其子类实例化时调用(涉及:子类对象实例化的全过程)
     *      > 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作
  • abstract修饰方法:抽象方法
     *      > 抽象方法只有方法的声明,没有方法体,也就是说抽象方法存在的意义仅仅是为了让子类重写这个方法
  •  *      > 关于为什么要有抽象方法?之前在多态的一个练习题中,定义了一个父类和两个子类,然后父类的被子类重写的方法体因为也不会被用上,只能随便写了一行 return 0;让其不报错。为了避免这样的情况就出现了abstract方法。
  •  *      > 包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。
     *      > 若子类重写了父类中的所有的抽象方法后,此子类方可实例化
     *        若子类没有重写父类(包括直接父类和间接父类)中的所有的抽象方法,则此子类也必须是是一个抽象类,需要使用abstract修饰,
  •  *      > 也就是说,不是abstract的子类,要把其所有父类中abstract的方法都重写一遍,否则其父类中定义的abstract方法不就白白定义了嘛
  • abstract不能修饰private、final、static方法和final类

 

  • 问题1:为什么obstract不能和final同时修饰一个类?
  • 因为抽象类意味着它不能被调用,所以要靠其子类的重写方法。但是final类没有子类

 

  • 问题2:抽象类中可以定义构造器吗?
  • 可以,因为抽象类中的属性是可以通过子类来调用的,而且抽象类中也可能有非抽象的方法,所以需要构造器来给属性赋值等操作。