为什么最终类不能被继承但是最终方法可以继承?

sra*_*i.s 5 java inheritance final class

在类和方法之间使用"final"关键字时我有很大的困惑因为最终方法只支持继承但不支持最终类

final class A{
    void print(){System.out.println("hello world");}
}

class Final extends A{
    public static void main(String[] args){
        System.out.println("hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

不能从最后的A级继承最终的延伸A {最终方法是......

class Bike{
    final void run(){System.out.println("run");}
}
class Honda extends Bike{
    public static void main(String[] args){
        Honda h=new Honda();
        h.run();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 17

为什么最终类不能被继承但是最终方法可以继承?

为什么?因为类和方法final 意味着不同的东西.

为什么它意味着不同的东西?因为这就是Java语言设计者选择设计语言的方式!

finalJava中的关键字有三种不同的含义.

  • 一个final类不能扩展.

  • final方法不能被重写.

  • 一个final变量不能分配给它已被初始化后.

他们为什么决定final在不同的环境中使用不同的东西?可能是因为他们不需要保留2或3个不同的关键字.(事后看来,这可能不是最好的决定.但这是有争议的......辩论它可能是浪费时间.)

值得注意的是,其他关键字在Java中具有多重含义; 例如staticdefault(在Java 8中).