0

私は Java の初心者なので、誰かが Animal Through Mammal オブジェクトで methodA() を呼び出す方法を教えてください。ダウンキャストとアップキャストが必要な理由を明確に理解できません。

class Animal{
void methodA(){
    System.out.println("I m Animal");
}
}
class Mammal extends Animal{
    void methodA(){
        System.out.println("I m Mammal child class of Animal");
    }
    void methodAB(){
        System.out.println("Two child class Dog and Cat I have");
    }
}

public class UpDownCast {

public static void main(String[] args) {

Animal a = new Animal();
a.methodA();

Mammal m = new Mammal();
m.methodA();


Animal A = new Mammal();
if (A instanceof Mammal){
    A.methodA();
}
Animal A1= new Animal();
Mammal M1 =(Mammal)A1;
M1.methodA();

}
}

前もって感謝します。

4

3 に答える 3

4
how to call methodA() in Animal Through Mammal object.

そのためには、methodAinを無視するMammal必要があり、Mammalオブジェクトを持っている場合は、それを直接呼び出すことができます。その場合、キャストする必要はありません。

まず、キャストによってオブジェクト自体が実際に変更されるのではなく、別のラベルを付けているだけであることを理解する必要があります。

ここに画像の説明を入力

于 2013-07-10T05:31:58.317 に答える
4

インスタンスがMammalであり、呼び出している場合methodA()(これは でオーバーライドされますMammal)、java はMammalの を呼び出しますmethodA()。これを動的ポリモーフィズムと呼びます

クラスから呼び出すmethodA()には、クラス内で以下のようなキーワードを使用して呼び出す必要がありますAnimalMammalsuperMammal

class Mammal extends Animal{
    void methodA(){
        super.methodA();// --> calling Animal's methodA()
    }
    void methodAB(){
        System.out.println("Two child class Dog and Cat I have");
    }
}

また、以下のステートメントは IS NOT A として発生ますClassCastException(哺乳動物は動物として)Animal Mammal

Animal A1= new Animal();
Mammal M1 =(Mammal)A1;
M1.methodA();
于 2013-07-10T05:27:15.813 に答える
2

メソッドをオーバーライドした場合、サブクラス オブジェクトを介してスーパークラスのメソッドを呼び出すことはできません。あなたの場合のように、哺乳動物は動物のサブクラスであるため、哺乳動物オブジェクトを使用すると、JVM は最初に哺乳動物クラスの methodA 実装を探します。存在する場合は哺乳動物クラス メソッドを呼び出し、そうでない場合は動物クラス メソッドが呼び出されます。

子が親から継承された動作を持ち、誰かが子でその動作を呼び出すと、子メソッドが実行されます。子に独自の動作がない場合は、親から単純に継承されるため、親のメソッドが呼び出されます。

于 2013-07-10T05:26:53.017 に答える