【问题标题】:private member variable is accessed by another object of same class? [duplicate]私有成员变量被同一类的另一个对象访问? [复制]
【发布时间】:2017-09-17 09:29:32
【问题描述】:

假设我们有这样的代码:

public class HelloWorld
{
    public static void main(String[] args)
    {
        OtherClass myObject = new OtherClass(7);
        OtherClass yourObject = new OtherClass(4);

        System.out.print(myObject.compareTo(yourObject));
    }
}

public class OtherClass
{
    private int value;

    OtherClass(int value)
    {
        this.value = value; 
    }

    public int compareTo(OtherClass c)
    {
        return this.value - c.value;
    }
}

显然在compareTo 方法中,即使我在c 对象之外访问它,我也能够访问它?

【问题讨论】:

  • private 是每个类而不是每个对象。

标签: java private-members


【解决方案1】:

您没有在 c 对象之外访问 c.value。

您正在做的是访问同一类中的类的私有变量。由于 c 变量与类的类型完全相同,因此您可以访问该类中的私有变量 c.value。

想象一下下面的情况

public class HelloWorld 
{
    public static void main(String[] args)
    {
        OtherClass myObject = new OtherClass(7);
        OtherClass yourObject = new OtherClass(4);
        yourObject.value = 23;
        System.out.print(myObject.compareTo(yourObject));
    }
}

public class OtherClass
{
    private int value;
    OtherClass(int value) 
    {
        this.value = value; 
    }  

    public int compareTo(OtherClass c) 
    {
        return this.value - c.value;
    }  
}

您的代码无法编译,因为除了 OtherClass 之外的任何类都无法访问值。但是,如果您尝试访问 c.value,您肯定会成功。

多学习封装会更好理解,[官方文档](https://docs.oracle.com/javase/tutorial/java/concepts/object.html"Oracle Documentation")是一个很好的信息来源

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多