我们可以在 Java 中覆盖 final 方法吗?

java 8object oriented programmingprogramming

覆盖是实现多态性的机制之一。当我们有两个类时,其中一个类使用 extends 关键字继承另一个类的属性,并且这两个类的方法相同,包括参数和返回类型(例如,sample)。

因为它是继承。如果我们实例化子类,则会在子类对象中创建超类成员的副本,因此这两个方法都可用于子类。

当我们调用此方法(sample)时,JVM 会根据用于调用该方法的对象调用相应的方法。

覆盖 final 方法

不,您不能在 java 中覆盖 final 方法。如果您尝试这样做,它会生成一个编译时错误,提示

示例

class Super{
   public final void demo() {
      System.out.println("This is the method of the superclass");
   }
}
class Sub extends Super{
   public final void demo() {
      System.out.println("This is the method of the subclass");
   }
}

编译时错误

Sub.java:7: error: demo() in Sub cannot override demo() in Super
   public final void demo() {
          ^
   overridden method is final
1 error

如果您尝试在 eclipse 中编译相同的程序,您将收到以下错误 −


相关文章