【发布时间】:2017-05-05 22:28:53
【问题描述】:
在学习 OCJP 时,我遇到了这个令我惊讶的软件包问题。 我在各自的包 A 和 B 中有两个简单的类 Message 和 New Message,如下所示:
package A;
public class Message
{
String getText()
{
return "text";
}
}
以及包B中的NewMessage类和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
通过关注此堆栈帖子
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() 方法。
有人可以向我解释这里发生了什么吗?这种情况是否类似于我链接的帖子中的私有方法覆盖的情况?
【问题讨论】:
-
你看懂了吗?
-
@ItamarGreen 我的理解是这种行为与私有方法覆盖的行为相同。我知道默认可见性意味着它仅对默认包类可见和可访问。如果我想覆盖它,那么我需要在 A 类的 getText() 方法中添加“protected”修饰符。
标签: java oop inheritance packages