在学习OCJP时,我遇到了这个软件包问题,这让我感到惊讶。
我有两个简单的类Message和New Message,分别位于它们自己的包A和B中,如下所示:
package A;
public class Message
{
String getText()
{
return "text";
}
}
以及在包B和A的子类中的NewMessage类:
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
通过遵循这个栈柱
Can a private method in super class be overriden in the sub-class?
我尝试用
@Override
标记NewMessage的方法并进行编译,这给了我以下错误:NewMessage.java:4: error: method does not override or implement a method from a supertype
@Override
^
这意味着我没有覆盖
getText()
方法。有人可以告诉我这里发生了什么吗?这种情况是否与我链接的帖子中的私有方法重写情况类似?
最佳答案
您在类Message
中的方法具有默认可见性,这意味着它仅在同一包中可见。因此,它对于其他包中的子类不可见。
由于该方法在包B
中不可见,因此无法覆盖我的NewMessage
。