私は、Javaでアップキャストとダウンキャストについて説明しているstackoverflowの記事や質問がたくさんあることを知っていました。そして、私はアップキャストとダウンキャストが何であるかを知っていました。しかし、私の質問はそれにはあてはまらない。Java - アップキャスティングとダウンキャスト
アップキャスティング - 子から親への変換 - コンパイラが注意します。親から子への変換 - - いいえ、キャストは
ダウンキャストを必要とされない明示的なキャストが
public class Animal {
public void getAnimalName(){
System.out.println("Parent Animal");
}
}
public class Dog extends Animal{
public void getDogName(){
System.out.println("Dog");
}
}
public static void main(String[] args) {
Dog d = new Dog();
Animal a = d; // Upcasting
a.getAnimalName();
Animal vv = new Dog();
Dog cc = (Dog)vv;//DownCasting
cc.getAnimalName();
cc.getDogName();
を要求されますが、それぞれがgetAnimalName()
とgetDogName()
のような、独自のメソッドを持っているAnimal
とDog
クラスに見れば。したがって、Dog extends Animal
(is-a関係)、派生クラス(Subclass)で基本クラス(Super Class)メソッドを使用することができます
メインメソッドの以下のコードを今考慮してください。
Dog
オブジェクトw.rt Animal
を作成します。だから私は今、私は、派生クラス
public class Dog extends Animal{
@Override
public void getAnimalName(){
System.out.println("Parent Animal overridden here");
}
public void getDogName(){
System.out.println("Dog");
}
}<br>
、メインメソッド内に、基本クラスのメソッドをオーバーライドしたい、のは、言ってみましょうだけAnimal
プロパティ(メソッド)
Dog d = new Dog();
Animal a = d; // Upcasting
a.getAnimalName();<br>
O/P : Parent Animal<br><br>
にアクセスできるようにすることができます、私はDog
オブジェクトWRT Animal
を作成していたとしても
Dog d = new Dog();
Animal a = d; // Upcasting
a.getAnimalName();<br>
O/P : Parent Animal overridden here<br><br>
、Bここでは、derviedクラスでオーバーライドされている基本クラスのメソッドを出力しています。
O/P : Parent Animal overridden here<br>
なぜこのように動作するのだろうか。これはoverride
のためですか?
貴重なご意見をお寄せください。
メソッドの参照は参照変数ではなく、参照変数の型に従って呼び出されます。メソッドをオーバーライドしないと、あなたがそれをオーバーライドすると、それは基本クラスから来ていません。 –
_ "しかし、ここでは基本クラスメソッド" _ _を表示しています。これは、基本クラスメソッドが呼び出されていると思われます。あなたの言葉にもっと注意し、あなたが意味するものを明確にしてください。 –