java - 当我无法使用基类引用调用派生类方法时,动态多态性有何用处

标签 java inheritance polymorphism

public class A {
    protected int x = 10;

    A() {
        System.out.println("Constructor A" ) ;
    }

    public void test() {
        System.out.println(" A " );
    }

    public void Aex() {
        System.out.println(" Aex " ) ;
    }
    public void testg() {
        System.out.println("Hello");
    }
}

public class B extends A {
    B() {
        System.out.println("Constructor B" ) ;
    }

    B(int num){
        this.x = num ;
        //System.out.println(this.x);
    }

    public void test() {
        System.out.println(" B " );
    }

    public int getx() {
        return this.x;
    }


}

public class C {
    public static void main( String [] args ) {
        A a = new B();
        //a.test();
        a.Aex();
        //a.testg();
        B b = new B(5);
        a = b;
        a.test();

        System.out.println( a.getx() ) ;
    }
}

B 类继承自 A 类,两者都有一个名为 test() 的方法。我可以创建对派生类对象的基类引用,因此我创建了一个引用 A a = new B();。当我调用 a.test() 时,Btest() 方法被调用,据我所知,这有助于我防止条件语句在我的代码中。但是假设 B 有另一个方法叫做 void getx() ,我想调用那个方法,我不能用基类引用来调用它,因为基类没有名为 void getx() 的方法。那么多态性在这种情况下有何用处呢?调用getx 的唯一方法是创建派生类的引用并调用getx()

最佳答案

我们使用类 AnimalBird 作为示例,而不是类 AB

假设您的 Animal 类有方法 eatsleep(所有动物都会做的事情),您的 Bird 类也有一个 fly 方法(只有鸟才能做到)。如果您有对 Animal 对象的引用,那么能够对该变量调用 fly 方法是没有意义的,因为您不知道它是哪种动物也就是说,它可能是 SlugWombat

关于java - 当我无法使用基类引用调用派生类方法时,动态多态性有何用处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32272958/

相关文章:

java - 使用 RandomAccessFile 写入时有没有办法设置编码

java - Eclipse 中的 LookAndFeel Java Synthetica

c++ - 前缀和后缀运算符继承

python - Python中的继承: "TypeError: run() takes no arguments (2 given)"

java - 以编程方式获取位图屏幕截图 Android

java - JDK 1.7 字符串 switch 语句不起作用

c++ - 使用继承时类的大小是多少?

scala - 在 Scala 中使用类型成员来减少类型冗长是否可行?

java - 为什么我的对象不需要调用 .toString 方法?

javascript - JavaScript 中的多态性示例使用错误