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:抽象类中可以定义构造器吗?
- 可以,因为抽象类中的属性是可以通过子类来调用的,而且抽象类中也可能有非抽象的方法,所以需要构造器来给属性赋值等操作。