为什么 Java 类不能同时是抽象的和最终的?
javaobject oriented programmingprogramming更新于 2024/8/26 14:20:00
抽象类
包含 0 个或更多抽象方法的类称为抽象类。如果它包含至少一个抽象方法,则必须将其声明为抽象的。
如果要在抽象类中使用具体方法,则需要继承该类,为抽象方法提供实现(如果有),然后使用子类对象可以调用所需的方法。
示例
在下面的 Java 示例中,抽象类 MyClass 包含一个名为 display 的具体方法。
从另一个类(AbstractClassExample)中,我们继承了 MyClass 类并使用子类对象调用其具体方法 display。
abstract class MyClass { public void display() { System.out.println("这是一个抽象类的方法"); } } public class AbstractClassExample extends MyClass { public static void main(String args[]) { new AbstractClassExample().display(); } }
输出
这是一个抽象类的方法
最终类
如果您将类声明为 final,则无法扩展;如果您尝试扩展最终类,则会生成编译时错误,提示"无法从最终超类继承"
示例
在下面的 Java 程序中,我们有一个名为 SuperClass 的最终类,我们正尝试从另一个类 (SubClass) 继承它。
final class SuperClass { public void display() { System.out.println("This is a method of the superclass"); } }
编译时错误
在编译时,此程序生成如下所示的编译错误 −
SubClass.java:7: error: cannot inherit from final SuperClass public class SubClass extends SuperClass{ ^ 1 error
抽象类和最终类
如果您将类声明为抽象类,则要使用它,您必须对其进行扩展;如果您将类声明为最终类,则您不能对其进行扩展,因为两者相互矛盾;您不能将类声明为抽象类和最终类,如果这样做,将会产生编译时错误。
示例
public final abstract class Example { public void sample() { } }
编译时错误
Example.java:1: error: illegal combination of modifiers: abstract and final public final abstract class Example { ^ 1 error