Java是否完全遵循面向对象的编程模型?

Deb*_*iti 1 java oop jvm private object

以下代码说明了这种情况:

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());

   }

 }
Run Code Online (Sandbox Code Playgroud)

不幸的是,deb的心[私有变量]被修改了.:)

Java允许代码在没有任何错误的情况下运行.但是,即使代码在同一个类中,给对象提供访问其他对象的私有成员的权限也是合理的吗?Java不应该禁止这个吗?

据我所知,私有意味着限制访问超出类源代码.但是在上面的源代码中应用了相同的概念.结果是灾难性的,因为一个人的心脏不能被任何随机的人修改.

JB *_*zet 5

如果结果是灾难性的,则不应对类进行编码以使其允许."bug"不是由类外部的代码引起的,而是由类本身的代码引起的.所以这只是代码中的一个错误.

如果Java不允许它,你只能通过它们的公共属性比较同一类的对象,例如,它会破坏封装(通过暴露私有东西),和/或非常慢(通过强制制作防御性副本私有属性使其可用于其他对象.