0

I m Beginner in Java, so someone please say how to call methodA() in Animal Through Mammal object.i cant understand why we need Downcasting and Upcasting clearly.

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();

}
}

Thanks in Advance.

4

3 回答 3

4

如果您的实例是Mammal并且您正在调用methodA()(在中被覆盖Mammal),java 将调用Mammal's methodA()。这称为动态多态性

要从类中调用methodA(),您需要在类中使用关键字调用它Animal,如下所示MammalsuperMammal

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");
    }
}

此外,以下语句将导致ClassCastExceptionas Animal IS NOT A Mammal(其中 as a Mammal IS A Animal )

Animal A1= new Animal();
Mammal M1 =(Mammal)A1;
M1.methodA();
于 2013-07-10T05:27:15.813 回答
4
how to call methodA() in Animal Through Mammal object.

为此,您必须覆盖methodAin Mammal,如果您有一个Mammal对象,您可以直接调用它。在这种情况下,不需要强制转换。

首先,你必须明白,通过强制转换你实际上并没有改变对象本身,你只是给它贴上了不同的标签。

在此处输入图像描述

于 2013-07-10T05:31:58.317 回答
2

如果重写了方法,则不能通过子类对象调用超类的方法。在您的情况下,Mammal 是 Animal 的子类,因此当您使用 Mammal 对象时,JVM 将首先在 Mammal 类中查找 methodA 实现,如果存在则它将调用 Mammal 类方法,否则将调用 Animal 类方法。

这个想法在继承方面是非常合乎逻辑的,如果 child 具有从 Parent 继承的行为并且有人在 child 上调用该行为,则 child 方法将执行。如果 child 没有自己的行为,那么它将简单地从 Parent 继承它,因此将调用 Parent 的方法。

于 2013-07-10T05:26:53.017 回答