如果我们在一个类中声明一个私有实例变量,那么该变量只在该类中可见,如果我们想要访问它,那么我们必须为它创建成员函数,也就是说,该类的对象是无法直接访问它... 例如,int this code ...
class A {
private int a;
public int getA() {
return a;
}
}
class B extends A {
void display()
{
System.out.println(a);//error,trying to access private variable
A obj=new A();
System.out.println(obj.a); //Even object is not able to access it directly
System.out.println(obj.getA());//Fine,it can access
}
}
但是为什么在内部类的情况下,外部类的对象能够直接通过对象访问内部类的私有变量...例如.-
class Outer {
void method1()
{
System.out.println(y); //Error,can't access private member of Inner
Inner obj=new Inner();
System.out.println(obj.y); //Why this doesn't show error
}
class Inner {
private int y;
}
}
为什么在java ???
中为外部类提供这种特权答案 0 :(得分:0)
因为内部类是其封闭类的成员,因此可以访问封闭类的其他成员,甚至是私有成员,就像该类的其他成员一样。
与此相反的是Java tutorial on nested (including inner) classes:
中明确列出的...是其封闭类的成员。 非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员。作为OuterClass的成员,可以将嵌套类声明为private,public,protected或package private。 (回想一下外部类只能声明为public或package private。)
(我的重点。)
但是你所描述的外部类访问内部类的私有成员的方向也是允许的,并且出于同样的原因:类的所有成员都可以访问其他成员该课程。