abstract修饰符

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。