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()
时,B
的 test()
方法被调用,据我所知,这有助于我防止条件语句在我的代码中。但是假设 B
有另一个方法叫做 void getx()
,我想调用那个方法,我不能用基类引用来调用它,因为基类没有名为 void getx()
的方法。那么多态性在这种情况下有何用处呢?调用getx
的唯一方法是创建派生类的引用并调用getx()
。
最佳答案
我们使用类 Animal
和 Bird
作为示例,而不是类 A
和 B
。
假设您的 Animal
类有方法 eat
和 sleep
(所有动物都会做的事情),您的 Bird 类也有一个 fly
方法(只有鸟才能做到)。如果您有对 Animal
对象的引用,那么能够对该变量调用 fly
方法是没有意义的,因为您不知道它是哪种动物也就是说,它可能是 Slug
或 Wombat
。
关于java - 当我无法使用基类引用调用派生类方法时,动态多态性有何用处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32272958/