1

クラスがクラスを拡張する場合、サブクラス オブジェクトにメモリを割り当てながら、スーパークラス参照を使用できます。これまでのところ、サブクラスはその親クラスのデータを継承するため、そうしても問題ないことを理解していますが、サブクラスのメンバーには参照であるためアクセスできず、追加内容がわからないためです子クラスによって行われます。

私の質問は、上記の概念にメソッド隠蔽を含めたとき、スーパークラス参照変数が子のクラス関数を参照し始めたことです。何故ですか ?本来の方法で独自のメソッドを呼び出さなかったのはなぜですか?

class A{
 void show(){ System.out.print("CLass A. \n"); }
}

class B extends A{
 void show(){System.out.print("Class B. \n");  }
}

class Main{
 public static void main(String[] args){
  A a= new A();
  B b= new B();
  a.show();   // prints Class A
  b.show();   // prints Class B

  A a1= new B();
  a1.show();   // print Class B. why is this ? it should be Class A as per theory? 
 }
}
4

3 に答える 3

2

変数とメソッドは 2 つの異なるものです。変数は、提供された実装タイプに基づいて実行時にメソッドが実行されるように、そのタイプに固執します。

ポリモーフィズム。メソッドは動的にバインドされ、実行時に選択されます。実装クラスをオーバーライドすると実行され、そうでない場合は型クラスからの実装が実行されます。

あなたが書くとき

 A a1= new B();

please call the implementations from the class Bタイプからのもの(右側にあります)を意味しますA

于 2016-02-16T09:00:07.723 に答える
0

常に最も具体的なクラスからメソッドを呼び出します。

于 2016-02-16T16:55:59.837 に答える