我是學生,學習Java。我知道,protected
表示從children
或the same package
訪問。這裏我們繼承並重寫一個受保護的方法。在這樣一個動作之後,無論基類想調用它自己的方法,它都會從子類中調用新的被覆蓋的方法。我一直在調試這一段時間,並用註釋標記執行順序。但我不明白爲什麼當我從基類構造函數中明確調用基類方法時,它不會調用它?爲什麼從基類調用方法調用子方法?
public class Solution {
public static void main(String[] args) {
new B(); // first
}
public static class A {
public A() {
initialize(); // third
}
protected void initialize() {
System.out.println("class A"); // we never go here
}
}
public static class B extends A {
public B() {
super(); // second
initialize(); // fifth
}
protected void initialize() {
System.out.println("class B"); // fourth, sixth
}
}
}
這是從一個網站上的任務,所以基本的解決方案是將initialize
方法的訪問修飾符改變從protected
到private
。但我仍然不明白爲什麼會出現問題。
我認爲這只是調用覆蓋的方法,因爲你是從覆蓋它的類調用超類,所以它總是會使用這個方法從B類? –
這是整個重寫... –