考慮下面的代碼:超類的私有方法執行的子類參考
父類:
package poc.poc;
public class SuperClass {
private void method() {
System.out.println("SuperClass!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SuperClass s = new SubClass();
s.method();
}
}
亞綱:
package poc.poc;
public class SubClass extends SuperClass {
public void method() {
System.out.println("Subclass!");
}
}
當我運行的SuperClass
的主要方法,我希望得到某種例外,但實際上是將運行SuperClass
中的代碼,而不是中的代碼,並因此在子類實例上運行超類類型的實例方法。
爲什麼會發生這種情況?編輯:這不違反封裝嗎?
P.S.當更改爲受保護的修飾符而不是私有修飾符時,多態性開始啓動,我們又回到了我所稱的「預期行爲」
這是因爲私人方法是在範圍內,因爲你在同一個文件。如果你在第三個文件中創建'main',你的代碼將不能編譯。 – 2014-11-01 13:37:32
在SubClass的''method'上放置一個@ @ Override'註解,你就會明白。 – Daniel 2014-11-01 14:00:19