我对" 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");
}
}
错误:
无法从Final A继承 class Final extennds 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();
}
}
答案 0 :(得分:14)
为什么不能继承最终类,但可以继承最终方法?
为什么呢?因为final
对于类和方法来说意味着不同的事情。
为什么它意味着不同的东西?因为这就是Java语言设计者选择设计语言的方式!
Java中final
关键字有三个不同的含义。
无法扩展final
课程。
无法覆盖final
方法。
初始化后,final
变量无法分配。
为什么他们决定使用final
来表示不同背景下的不同内容?可能是因为他们不需要保留2或3个不同的关键字。 (事后看来,这可能不是最好的决定。但这是有争议的......辩论它可能是浪费时间。)
值得注意的是,其他关键字在Java中具有多重含义;例如static
和default
(在Java 8中)。
答案 1 :(得分:-1)
public class ParentDemoClass {
public final void sayHello(){
System.out.println(" Hello from parent ... PARENT");
}
}
//Inheritance example to override final method from child class
public class ChildDemoClass extends ParentDemoClass{
/*When tried to override gives compiler error Cannot override the
final method from ParentDemoClass */
public void sayHello(){
System.out.println(" Hello from child ... CHILD");
}
}
//Inheritance example to access final method from child class
public class ChildDemoClass extends ParentDemoClass{
public void sayHelloFromChild(){
System.out.println(" Hello from parent ... CHILD");
sayHello();
}
public static void main(String as[]){
new ChildDemoClass().sayHelloFromChild();
}
}
//OUTPUT is :
Hello from parent ................................. CHILD
Hello from parent ................................. PARENT
最终方法继承只允许访问子类中的最终方法,但不允许覆盖。