java - 通过强制转换调用 Animal 类的 methodS

标签 java downcast

我是Java初学者,所以请有人告诉我如何通过哺乳动物对象调用Animal中的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();

}
}

提前致谢。

最佳答案

如果您的实例是 Mammal 并且您正在调用 methodA()(在 Mammal覆盖) ),java会调用MammalmethodA()。这称为Dynamic Polymorphism

要从 Mammal 类调用 AnimalmethodA(),您需要使用 super 关键字调用它,在 Mammal 类中,如下所示

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

此外,下面的语句将导致 ClassCastException as Animal IS NOT A 哺乳动物(作为哺乳动物 IS A 动物)

Animal A1= new Animal();
Mammal M1 =(Mammal)A1;
M1.methodA();

关于java - 通过强制转换调用 Animal 类的 methodS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17562958/

相关文章:

java - 为什么向下转换在 C++ 中是一种不好的做法,而不是在另一种语言中?

c# - 在不失表现力的情况下从 Generic 中脱颖而出

java - 在父类(super class)构造函数中将 'this' 转换为子类

java - Eclipse RCP - JFace 对话框不显示按钮

java - 在 Spring 中编写自定义 PlaceholderResolver(如 PropertyPlaceholderConfigurerResolver)

java - 将 List<Object> 分解为一组已知派生类型的列表

java - 修复此铸件行为的最简洁方法

java - 正则表达式不删除 A-Z 和 a-z

java - 使用 HttpClient 在 java 中的连接池

java - 为 LIst 中的元素创建子序列