public final
或protected final
方法在基类中没有覆盖很简单,当我们在父类中创建方法private final
时,即使你创建了一个父类{{1},它也会被覆盖并在方法private final
覆盖的子类中扩展它。有人可以解释这种行为吗?
protected final
答案 0 :(得分:0)
你好,因为其他人说你误解了压倒一切。首先,A类中的show方法是私有的。因此,私人成员无法从该类的外部访问。下面的示例将解释:
class A {
private final void show() {
System.out.println("Show method from A");
}
}
public class B extends A {
// protected final void show() {
// System.out.println("Show method from B");
// }
public static void main(String... s) {
new B().show();
}
}
如果你编译它会产生以下错误:
B.java:12: error: cannot find symbol
new B().show();
^
symbol: method show()
location: class B
1 error
在你的问题中,它正在调用方法“show()”,它在B类中定义而不是在A.i中希望这将澄清你的疑问。
答案 1 :(得分:0)
你可以声明一些或所有类的方法最终。你用的是 方法声明中的final关键字表示该方法 不能被子类覆盖。 Object类执行此操作-a 其方法的数量是最终的。
如果有一个实现,你可能希望将方法设为final 不应该改变,这对于一致的状态至关重要 对象。
来自java官方Documents的声明。
答案 2 :(得分:0)
如果您的代码是
A a = new B();
a.show();
然后您将尝试从父类调用无法覆盖的方法。在你的例子中,这是私有的,你不会让它工作。尝试将这些方法公之于众。
所发生的事情是,当对象的类型为B时,你的B.show()方法正在掩盖A.show() - 这总是事情的运作方式。当引用属于父类的类型时,覆盖方法有效。