class A2 {
    int numt=111; 
  void hello() {
    System.out.println("Hello from A2");
  }
}
class B2 extends A2 {
  void hello() {
    System.out.println("Hello from B2");
  }
}
class C2 extends B2 {
  int numt=666;  
  void hello() {
    System.out.println("Hello from C2");
  }
}
class MethodOverriding2 {
  public static void main(String args[]) {
    A2 obj = new C2();
    obj.hello();
    System.out.println("Num is : " + obj.numt);
  }
}
つまり、基本的にここでの出力は
Hello from C2
Num is : 111
C2からhello()を実行するのに、A2からnumtを実行するのはなぜですか?
私が理解しているように、私はA2をB2に継承し、C2をB2に継承しています。次に、メインで、C2を参照するクラスA2のオブジェクトを作成しています(A2はC2のスーパークラスであるため、これを実行できます)。その後、コンパイル時にコードが満たされるため、エラーは発生しません。実行時に、プログラムは「hello()」を探します。ここで、「obj」は、定義されている場所ではなく、参照しています。ただし、「numt」の場合は逆になります。なんでそうなの?そして、私の上記の理解は正しいですか?そうでない場合は修正してください。
どうもありがとう!私はそれが初心者の質問であることを知っています、私はOOPに非常に新しいです。