gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:51 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com