私有可见性修饰符的含义

时间:2013-09-20 12:51:32

标签: java object instance visibility private

在下面的'Tosee'课程中,当我调用s.hiddenInt时,hiddenInt是可见的。 但是,当我在另一个类“CantSee”中创建“ToSee”对象时,私有变量不可见。为什么会这样?我的印象是私有意味着在任何类的实例中,客户端无法看到特定的实例变量或方法?为什么我能在'ToSee'的主要方法中看到hiddenInt?

public class ToSee {

    private int hiddenInt = 5;

    public static void main(String[] args) {
        ToSee s = new ToSee();
        System.out.println(s.hiddenInt);

    }
}


public class CantSee {

    public static void main(String[] args) {
        ToSee s = new ToSee();
        System.out.println(s.hiddenInt);
    }

}

5 个答案:

答案 0 :(得分:2)

Private in Java意味着变量或方法只能在声明它的类中访问。如果您对私人的印象是真实的,那么它将无法在任何地方访问,这使得它完全无用。

答案 1 :(得分:1)

private表示它所在的最外层封闭类之外的任何代码都是不可见的。由于CantSee类与ToSee类是分开的,因此无法看到私有字段。如果CantSeeToSee都是同一个类的成员,或者一个是另一个成员,那么能够读取私有字段。私有字段可读的结构的一些示例如下:

public class Outer {
    public class ToSee {
        ...
    }

    public class CantSee {
        ...
    }
}

public class CantSee {
    ...
    public class ToSee {
        ...
    }
}

答案 2 :(得分:1)

修饰符private使变量或方法对它声明的类型(类)是私有的。所以只有这个类才能看到它。

您可以在hiddenInt中看到变量ToSee.main,因为ToSee.mainTooSee类的静态方法。因此,它可以访问ToSee的所有私有变量,静态变量或实例变量。

私有并不意味着私有实例。一个类的实例可以访问同一个类的另一个实例的私有变量。

public class ToSee {

     private int hiddenInt = 5;

     public void printInt(ToSee toSee){
         System.out.println(toSee.hiddenInt);
     }

     public static void main(String[] args) {
        ToSee tooSee1 = new ToSee();
        ToSee tooSee2 = new ToSee();

        tooSee2.hiddenInt = 10;

        tooSee1.printInt(tooSee2); // will output 10
    }
}

答案 3 :(得分:1)

main方法在Java中具有特殊的内涵,但它仍然是属于特定类的方法。

main方法可以访问封闭类中的私有字段,可以通过本地实例(在实例字段的情况下)或直接(在static字段的情况下)。

答案 4 :(得分:1)

I was under the impression that private means that in any instance of a class, 
the client cant see that particular instance variable or method?

不正确!私有访问修饰符只是意味着使用它的变量只能在封闭类中访问。期。由于main()方法位于ToSee类中,而您拥有hiddenInt私有实例变量,因此它是可见的。如果CantSee类不在ToSee类中,则不可见(您需要使用getter / setter方法。)