【发布时间】:2012-04-28 20:13:51
【问题描述】:
下面的代码说明了这种情况:
class Human {
private String heart = "default heart";
public void control(Human h) {
h.heart = "$%^&*@@!#^";
}
public String getHeart() {
return heart;
}
}
public class HumanTest {
public static void main(String[] args) {
Human deb = new Human();
Human kate = new Human();
System.out.println(deb.getHeart());
kate.control(deb);
System.out.println(deb.getHeart());
}
}
不幸的是,这里 deb 的心脏 [私有变量] 被修改了。 :)
Java 允许代码在没有任何错误的情况下运行。但是即使代码在同一个类中,赋予对象访问其他对象的私有成员的特权是否合理? Java 不应该不允许这样做吗?
据我所知,私有意味着限制对类源代码之外的访问。但同样的概念也适用于上面的源代码。结果是灾难性的,因为一个人的心不能被任何随机的人改变。
【问题讨论】:
-
很少有语言是纯 OOP。您只需阅读
public static void main即可了解 main 是在没有对象的情况下运行的。 -
您的问题根本与 OOP 无关。这是关于Java中的访问控制机制。它没有是/否的答案。 Jim Gosling 就是这样设计的:就是这样。如果你想知道为什么,要么在语言规范中,要么在 JVM 规范中,要么在 Jim 的脑袋里。
-
那么你期望私人会员被什么使用?如果不被公共成员使用,那么你认为私人成员应该在哪里使用。
标签: java oop object jvm private