继承在这里发生了什么?

Kra*_*ken 2 java inheritance

这是我的代码

class Animal{
  public int numOf=3;
}

class Dog extends Animal{
  public int numOf=4;
}
class TestCase{
  public static void main(String[] args){
      Animal a = new Dog();
      Dog d = new Dog();
      System.out.println(a.numOf);
      System.out.println(d.numOf);
  }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时a.numOf,不应该是4,就像方法一样吗?

Sot*_*lis 7

多态性不适用于字段.

根据其访问的变量的声明类型解析字段.

System.out.println(a.numOf); // refers to A's, since a's declared type is A
System.out.println(d.numOf); // refers to D's, since d's declared type is D
Run Code Online (Sandbox Code Playgroud)

你有一个案例hiding.

  • @RichardJPLeGuen beatin'将一直持续到我满意为止(和/或在工作中有事情要做). (3认同)
  • Sotirios,我们得谈谈你在所有这些java问题上击败我的枪! (2认同)