以下に、多型の例を示します。コンパイラはおよそdp.consume()
を不平を言う理由スーパークラス参照変数を使用してサブクラスの新しいメソッドにアクセスできない理由
package tsys;
public class DynamicPolymorphism {
public void eat(){
System.out.println("DynamicPolymorphism");
}
}
class AnotherClass extends DynamicPolymorphism{
public void eat(){
System.out.println("Another Class");
}
public void consume(){
System.out.println("consume");
}
}
class TestPolymorphism{
public static void main(String args[]){
DynamicPolymorphism dp = new AnotherClass();
dp.eat();//Works fine
dp.consume();//compile time error
}
}
今の質問はありますか?この質問はインタビューで私に聞かれました。私はその理由を と説明しました。 "コンパイル時コンパイラはdp
のタイプが参照のタイプについてDynamicPolymorphism
であることを知っているので、コンパイラはconsume
メソッドを見つけることができません。
私の答えは、コンパイラがエラーを与えるシーンの裏で何が起こるかを尋ねましたが、変数dp
をAnotherClass
のインスタンスに参照しています。
私はカウンターの質問に対して面接官を説明できますか?
Downvoters、私が改善できるように、何が間違っているのか説明できますか? –
私はカウンターの質問を理解していないので、私は説明を求めていたでしょう。 「舞台裏」はありません。コンパイラは 'dp'が' DynamicPolymorphism'であることを知っているので、 'DynamicPolymorphism'で宣言されたメソッドへの呼び出しだけを知ることができます。基本的にあなたが言ったこと。これは、Javaのような[静的型付けされた](https://stackoverflow.com/q/1517582/5221149)言語の基本的性質です。 – Andreas
@Andreasあなたの答えは適切です、私はただここを見ています。多形性に関して私が見逃したことはありますか?おかげで –