繁体   English   中英

私有变量约束Java

[英]private variable constraints java

仅出于示例目的,我将String作为成员变量。 但是本来就有复杂的结构。

public class ClassA {

    private final String test ;

    public ClassA(String str) {
        test = str;
    }

    @Override public int hashCode() {
        return test.hashCode();
    }

    @Override public boolean equals(Object obj) {
        return obj instanceof ClassA && test.equals(((ClassA)obj).test);
    }

}


public class ClassB {

    public static void main(String args[])
    {
        ClassA obj1 = new ClassA("abc");
        ClassA obj2 = new ClassA("def");
        obj1.equals(obj2);
        obj2.test;//not valid
    }
}

据我了解,只有在ClassA的方法中才可以访问obj1的私有变量test ,并且应该从obj1的上下文中调用这些方法。

当我调用obj1.equals(obj2) ,可以从obj1的上下文访问obj1.equals(obj2)测试变量。

因此,我们可以从ClassA方法中访问ClassA类型的任何对象的私有变量。

当您编写自己的内容时:

因此,我们可以从ClassA方法中访问ClassA类型的任何对象的私有变量。

这是对的。

私有实例变量对定义它们的类是私有的。

这并不意味着它们是变量值存储在其中的私有实例

下列

据我了解,只有在ClassA的方法中才可以访问obj1的私有变量测试,并且应该从obj1的上下文中调用这些方法。

只是部分正确的:该方法也可以是在一个静态方法ClassA (未在任何实例的情景ClassA ),这意味着调用ClassA.staticMethod(OBJ1); 在那里您将可以访问obj1.test

以下是肯定的答案:

So can we access the private variables of any object of type ClassA from within ClassA methods?

“私有”并不意味着对象是私有的,而是类是私有的。 使用私有字段的主要原因之一是实现隐藏,但是对类本身隐藏类实现是没有用的。

请记住,在这种情况下,“ ClassA”实际上意味着“仅ClassA”。 您将无法从ClassA的子类访问私有成员。

当然可以。 专用访问说明符无法停止该类以访问其自己的变量。 它与访问说明符无关,否则您的getter和setter方法将如何工作。

这是封装的基础。 您可以通过创建一个类的对象来访问它的变量。 但默认情况下,同一类可以访问其成员。

再次有人正确地指出,超类的私有成员也不可见或不可访问。 但这是一个不同的概念。

您可以浏览下面的精美文章/博客

http://inheritingjava.blogspot.in/2011/01/chapter-4-access-modifiers.html

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM