4

出力の理由を教えてください。

私によると、 b.getx() を使用すると、B のオブジェクトの参照 ID を取得しb.getx().x、10 の値を取得する必要がありますが、このプログラムを実行すると、出力は 5 になります。

class Base {
  int x = 5;
  public Base getx() {
    return new Base();
  }
}

class Child extends Base {
  int x = 10;
  public Child getx() {
    return new Child();
  }

  public static void main(String ...s) {
    Base b = new Child();
    System.out.println(b.getx().x);
  }
}
4

4 に答える 4

0

動的バインディングは、実行時に宣言を参照するための実行時プロセスです。これは、オーバーライドされたメソッドへの呼び出しがコンパイル時ではなく実行時に解決される遅延バインディングとも呼ばれます。オブジェクト指向システムでは、メソッドのオーバーライド (動的ポリモーフィズム) は実行時に行われます。あるメソッドを別のメソッドでオーバーライドする場合、2 つのメソッドのシグネチャは同一でなければなりません。

例:

class Animal{

  public void eat(){
      System.out.println("Animals voice");
   }

public void go(){
      System.out.println("Animals can walk");
   }

}

class Dog extends Animal{

   public void go(){
      System.out.println("Dogs can walk and run");
   }
   public void eat(){
      System.out.println("Dogs can eat a wide range of foods");
   }
}
于 2014-05-01T07:03:21.330 に答える