在學習OCJP時,我遇到了這個讓我感到意外的包問題。 我有兩個簡單類的類信息和新信息分別每一個自己的包A和B的範圍內:包/默認訪問的交叉包繼承
package A;
public class Message
{
String getText()
{
return "text";
}
}
和類NewMessage作爲這是在程序包B和亞類A的:
package B;
public class NewMessage extends A.Message
{
String getText() {
return "New Message";
}
public static void main(String[] args)
{
System.out.println(new NewMessage().getText());
}
}
而且我編譯如下:
javac -d . Message.java
javac -d . NewMessage.java
和運行:
java B.NewMessage
和它打印
New Message
按照此stackpost Can a private method in super class be overriden in the sub-class? 我試圖標記NewMessage作爲的方法,採用@Override
並且編譯,這給了我以下錯誤:
NewMessage.java:4: error: method does not override or implement a method from a supertype
@Override
^
這意味着我不是覆蓋getText()
方法。 有人可以向我解釋這裏發生了什麼?這種情況是否類似於我鏈接後的私人方法重寫的情況?
你明白嗎? – ItamarG3
@ItamarGreen我的理解是這種行爲與私有方法重寫的行爲相同。我知道默認的可見性意味着它只能被默認的包類看到和訪問。如果我想覆蓋它,那麼我需要在類A中的getText()方法中添加「protected」修飾符。 –