我想測試以下情況:公共方法如何返回私有類實例?
- 有一個主要的。 (
city.Main
) - 有一個包。 (
package castle
) - 包內有一個公共類(
castle.Guard
)和一個包私人類類(castle.Princess
)。 - 如果public類正在返回一個私有類的實例呢?
這裏是我的代碼:
Main.java
package city;
import castle.Guard;
public class Main {
public static void main(String[] args) {
Princess princess = Guard.getPrincessStatic();
// Error: Princess cannot be resolved to a type
Guard.getPrincessStatic().sayHi();
// Error: The type Princess is not visible
Guard guard = new Guard();
guard.getPrincess().sayHi();
// Error: The type Princess is not visible
guard.getPrincessMember().sayHi();
// Error: The type Princess is not visible
}
}
Guard.java
package castle;
public class Guard {
public Princess getPrincess() {
return new Princess();
}
public static Princess getPrincessStatic() {
return new Princess();
}
private Princess m_princess = new Princess();
public Princess getPrincessMember() {
return m_princess;
}
}
Princess.java
個package castle;
class Princess {
public void sayHi() { System.out.println("Hi world"); }
}
通知所有4個main()
報表有錯誤。
我也做了一些研究。實際上我想模仿this answer。但我不是爲什麼我的代碼拋出錯誤。
感謝您的任何解釋!
編輯:
我正在打算使castle-Princess
包私人。我知道返回一個包私人類的包,我應該爲錯誤做好準備。但爲什麼that answer工作,但我的不?
錯誤基本上是說「私人手段*私人*!」這些鏈接可能有所幫助:[Java語言規範:可見性](http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#d5e8032),http://stackoverflow.com/ questions/5203205/why-can-we-override-a-base-class-method-with-private-extended-class-method,[Visibility and Coupling](http://www.leepoint.net/JavaBasics/oop/) oop-70-visibility.html) – paulsm4