我正在尝试测试以下情况:
- 有一个主类(
city.Main
)。 - 有一个包(
package castle
)。 - 在该包中,有一个公共类(
castle.Guard
)和一个包私有类(castle.Princess
)。 - 如果公共类返回私有类的实例会怎样?
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"); }
}
请注意,main()
中的所有 4 条语句都有错误。
我也做了一些研究。实际上,我想模仿这个答案。但是我不知道为什么我的代码会抛出错误。
感谢任何解释!
编辑:
我打算将 castle-Princess
设为包私有。我知道,通过返回其包外的包私有类,我应该做好准备迎接错误。但为什么那个答案能够工作,而我的却不能呢?