次のコード:
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でしょうか。誰かが私にこれを説明できますか?