作者skipeco (skipeco)
看板java
标题[问题] 继承不同package类别 的 方法可见度?
时间Sun Mar 16 16:55:15 2014
最近看到这个页面79题:
http://yaya741228.pixnet.net/blog/post/86130644
下方的回应有人提到:
原题中 packageB.XMLMessage 的 getText()
因为可见度的关系,并不是也没有复写父类别
packageA.Message 的同名 getText()。所以若将原题
System.out.println(new XMLMessage().getTxt());
换置成
Message msg = new XMLMessage();
System.out.println(msg.getText());
会编译错误
小弟用Eclipse实验的结果,确实跳出可见性错误
"The method getText() from the type Message is not visible"
----------
问题是:如何使换置後的版本编译成功?
小弟原以为:
将 两个 getText() 都改为 protected
并在 XMLMessage.java import packageA.* 应该就有足够的可见度了
但实验结果却是:
只改成 protected 仍会出现可见性错误, 必须要改成 public 才能正确执行
---------
可是,不是 protected 即足以使不同 package 的子类别使用父类别的方法了?
为何此处一定要设定到public呢?
--------------
(附上小弟无法成功编译的两档案--两个getText()改成public即可成功)
Message.java
package packageA;
public class Message {
protected String getText(){return "aaa";}
}
XMLMessage.java
package packageB;
import packageA.*;
public class XMLMessage extends Message {
protected String getText(){return "<msg>text</msg>";}
public static void main(String[] args) {
Message msg = new XMLMessage();
System.out.println(msg.getText());
}
}
--------------
麻烦各位先进指引迷津了 m(_ _)m
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.60.172