java中的相对私有访问说明符?

java中的相对私有访问说明符?,java,object,inheritance,nested,private,Java,Object,Inheritance,Nested,Private,如果我们在一个类中声明一个私有实例变量,那么该变量只在该类中可见,如果我们想要访问它,那么我们必须为它创建成员函数,也就是说,该类的对象不能直接访问它。。。 例如,int此代码 class A { private int a; public int getA() { return a; } } class B extends A { void display() { System.out.pr

如果我们在一个类中声明一个私有实例变量,那么该变量只在该类中可见,如果我们想要访问它,那么我们必须为它创建成员函数,也就是说,该类的对象不能直接访问它。。。 例如,int此代码

    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中向外部类提供这种特权?

因为内部类是其封闭类的成员,因此可以访问封闭类的其他成员,甚至是私有成员,就像类的其他成员一样

与此相反的情况在以下文件中明确列出:

…是其封闭类的成员非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们声明为私有。静态嵌套类不能访问封闭类的其他成员。作为OuterClass的成员,嵌套类可以声明为private、public、protected或package private。(请记住,外部类只能声明为public或package private。)

(我的重点。)


但是您所描述的外部类访问内部类的私有成员的方向也是允许的,原因相同:一个类的所有成员都可以访问该类的其他成员。

这两个代码块都不能编译;在任何函数或方法之外都有
println
语句。是的,像这样的问题的起点应该是编译的代码,运行时执行您所说的操作。