抽象类与抽象方法
abstarct 关键字
- abstract可以修饰类,方法
- abstract修饰的类被称为抽象类,抽象类不能实例化
1. 虽然抽象类不能实例化,即,不能new对象,构造方法不能使用,但是其子类可以,因为创建子类对象的时候一定会调用父类的构造器。
2. 也就是说抽象类中一定会有构造器,便于子类对象实例化
3. 在开发中一定会提供抽象类的子类,毕竟抽象类本身不能实例化,如果没有子类。那将毫无用处 - abstract修饰的方法称为抽象方法
1. 不是指方法体内没有语句
2. 抽象方法只有方法的声明,没有方法体
3. 抽象方法所在的类必定是抽象类(因为我们得保证抽象方法不能在本类中被调用,因此该类不能new对象,因此只能为抽象类)
4. 但抽象类中可以没有抽象方法。(非抽象方法并不能影响当前类是否抽象,换句话说,抽象类只是能说明当前类无法实例化对象,不是抽象方法,子类也能继承)
5. 抽象类中的所有方法都会被子类继承,但是子类无法直接调用抽象方法,所以只能重写所有抽象方法,这样子类就可以实例化,否则子类也为抽象类,需用abstract修饰
6. 从抽象方法的形式上也可以看出,该方法存在的原因就是因为它是面向于多个子类的,不提供具体的方法实现方式,只是要求子类重写。 - abstract使用上的注意点:
1. abstract 不能用来修饰:属性,构造器
2. abstract 不能用来修饰私有方法——抽象类的子类中一定会有一个类实例化,但是如果方法被声明为private,那么该方法将对子类不可见,更不用说重写了
3. abstract 不能修饰静态方法——定义抽象方法的目的是重写此方法,但如果定义成static的则不能重写,再者抽象类是不能实例化的,也就是不会分配内存空间,但是静态方法则不同,它随着类的加载而调用,因此会占据内存
4. abstract不能修饰final的方法与类——fiinal修饰的方法不能被重写,final类不能被继承