abstract修饰符可用来修饰类和成员方法:
- 用abstract修饰的类是抽象类,它位于继承树的抽象层,抽象类不能被实例化(不允许创建它本身的实例)。
- 用abstract修饰的方法是抽象方法,它没有方法体。抽象方法描述系统有什么功能,不提供具体实现。
abstract修饰符的语法规则:
①
抽象类中可以没有抽象方法,但包含抽象方法的类必须被定义为抽象类。如果子类没有实现父类中所有的抽象方法,那么子类也必须定义为抽象类。
要么执行Add unimplemented methods,实现所有抽象方法,要么执行Make type ‘Sub’ abstract,将Sub类定义为abstract。
②
不存在抽象静态方法。static和abstract不能在一起使用。
public abstract class Base {
abstract public static void method1();//错误
public static void method2() {}//合法
}
③
抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。抽象类不能被实例化,但是可以创建一个引用变量,其类型是一个抽象类,让它引用非抽象子类的一个实例。
public abstract class Base {
public Base() {
System.out.println("Base构造方法");
}
}
class Sub extends Base{
public Sub() {
super();
}
public static void main(String[] args) {
// Base b1 = new Base();//错误
Base b2 = new Sub();
}
}
运行结果为:Base构造方法
④
抽象类和抽象方法不能被final修饰符修饰。
因为抽象类只有创建其子类,抽象方法才能被实现,而final修饰的类不能拥有子类,修饰的方法不允许被子类方法覆盖。
⑤
抽象方法不能被private修饰。
因为如果方法是抽象方法,那么这个方法会在子类里去实现,而private修饰的方法只能在同一个类中才能访问,所以子类是无法访问到父类的抽象方法的,所以被private修饰的抽象方法永远无法实现。
版权声明:本文为weixin_43982698原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。