在学习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

07-25 23:54