输出说明

Ian*_*ath 1 java

问题可能是一个非常基本的问题.我是Java的新手,所以请耐心等待.我的代码:

class A
{
     int b=10;

     A()
     {
          this.b=7;
     }

     int f()
     {
          return b;
     }
}

class B extends A{ int b; }

class Test
{
     public static void main(String[] args)
     {
          A a=new B();
           System.out.println(a.f());
     }
}
Run Code Online (Sandbox Code Playgroud)

为什么输出7?B类不获得自己的实例变量b吗?

Kar*_*k T 6

它将但功能f只能看到的版本b是在A.因此该函数返回7.

如果你的功能复制fclass B你会看到成员bclass B返回.

正如隐藏类的实例变量所解释的那样,Java变量不是多态的.2个b变量是你想象的2个不同变量,但是当你调用函数时,A.f它只能看到一个b变量A.所以它返回A.b而不是B.b.

所以为了回答你的问题,B类会得到它自己的实例变量b,它完全独立,A.b但你现在无法访问它,所以你看不到它的价值.