次のコード:
class Base{}
class Agg extends Base{
public String getFields(){
String name="Agg";
return name;
}
}
public class Avf{
public static void main(String args[]){
Base a=new Agg();
//please take a look here
System.out.println(((Agg)a).getFields()); // why a needs cast to Agg?
}
}
私の質問は:なぜ私たちはに置き換えることができない ((Agg)a).getFields()
のa.getFields()
ですか?なぜキャストを型変換する必要があるのa
ですか?そして、それgetFields()
はクラスで定義されていないBase
ので、クラスAgg
はこのメソッドをその基本クラスから拡張しません。getFields()
しかし、クラスでメソッドを定義した場合 、次Base
のようになります。
class Base{
public String getFields(){
String name="This is from base getFields()";
return name;
}
}
すべてが大丈夫だろう。その 場合、((Agg)a).getFields()はa.getFields()と同等です。
コード内
Base a=new Agg();
この行a
は、の参照がAgg()
あり、クラスのメソッドを直接呼び出すことができることを意味しますかAgg
?getFields()
しかし、クラスでメソッドを定義しないと、なぜ違いがあるのBase
でしょうか。誰かが私にこれを説明できますか?