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