Java 抽象类


一、抽象类的定义

  被关键字“abstract”修饰的类,为抽象类。(而且,abstract只能修饰类和方法)

  下面显示了一个最简单的空抽象类

public abstract class AbstractClass {
    public static void main(String[] args) {
        AbstractClass abstractClass=new AbstractClass();
    }
}

  当对这个空的抽象类进行实例化时,编译器会报错:

  'AbstractClass' is abstract; cannot be instantiated'

   现在对这个抽象类进行扩展,添加属性和方法:

www.geeksforgeeks.org的这篇文章中,对此做了解释:

  因为,方法重写(Overriding)是OOP语言的一种特性,在Java中,它是实现“运行时多态”一种方式!!而父类子类的相同签名的同名方法的情况,there won’t be any run-time polymorphism。

  还篇文章(”5 Java concepts explained: Overloading, overriding, shadowing, hiding, and obscuring“),解释了这些概念的差别,但是却没有提到上述的method hidding情况。(所以我以为隐藏只是继承关系的类中变量之间的行为)。

 

  四、抽象类的继承

  从抽象父类派生的子类如果不能实现所有的抽象方法,它也必须声明为抽象的。

  抽象类可以定义构造方法,且能被子类在构造方法中调用。

  一个非抽象类的子类,可以声明为抽象类。

 

  五、final与abstract的矛盾

  final关键字可以修饰类、方法、变量。

  final修饰的类不能被派生;final修饰的方法,禁止子类重写。

  所以我们可以看出,final和abstract就是冰火不容的~Powered by .NET 5.0 on Kubernetes

相关