在下面的'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);
}
}
答案 0 :(得分:2)
Private in Java意味着变量或方法只能在声明它的类中访问。如果您对私人的印象是真实的,那么它将无法在任何地方访问,这使得它完全无用。
答案 1 :(得分:1)
private
表示它所在的最外层封闭类之外的任何代码都是不可见的。由于CantSee
类与ToSee
类是分开的,因此无法看到私有字段。如果CantSee
和ToSee
都是同一个类的成员,或者一个是另一个成员,那么将能够读取私有字段。私有字段可读的结构的一些示例如下:
public class Outer {
public class ToSee {
...
}
public class CantSee {
...
}
}
或
public class CantSee {
...
public class ToSee {
...
}
}
答案 2 :(得分:1)
修饰符private使变量或方法对它声明的类型(类)是私有的。所以只有这个类才能看到它。
您可以在hiddenInt
中看到变量ToSee.main
,因为ToSee.main
是TooSee
类的静态方法。因此,它可以访问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方法。)