当我无法使用基类引用调用派生类方法时,动态多态性有什么用?

沙哑的狼
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()我了解test()B会调用方法,这有助于防止代码中的条件语句。但是,假设B有另一个方法称为void getx(),并且我想调用该方法,则不能使用基类引用来调用它,因为基类没有称为void的方法getx()那么在这种情况下多态性有什么用呢?调用的唯一方法getx是创建派生类和call的引用getx()

密码箱

而不是类AB让我们使用类AnimalBird一个例子。

假设您的Animal班级有方法eatsleep(所有动物都可以做的事情),而您的Bird班级也有一个fly方法(只有鸟可以做)。如果您引用了某个Animal对象,则无法fly在此变量上调用该方法是没有意义的,因为您不知道它是哪种动物,它可能是aSlug或an Wombat

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++多态性-调用具有不同签名的派生类方法

从基类派生类扩展多态性

C ++多态性:派生类调用基类虚拟函数,而不是重写的派生类

如何使用多态性从基类访问派生类向量成员?

C ++多态性:是否可以使用从双重派生类到基类的函数?

派生类中不同方法的多态性

为什么`this`在调用派生类对象时无法从基类方法访问派生类成员

C#多态性:获取具有相同名称的派生类的属性,而不是基类的字段

C ++多态性,派生类的名称解析

多态性从基类调用函数

在基类内部使用派生类实例调用带有派生类数据的基类方法

创建基类指针的向量,并将派生类对象传递给它(多态性)

有什么方法可以防止派生类初始化基类引用

C#:我的派生类无法覆盖基类的接口方法实现,为什么?

当我抛出派生类的对象时,为什么基类的catch块会捕获异常?

非多态派生类的基类

多态性是否适用于值?或者通过(base-)value返回时使用派生类的move构造函数

用派生类调用重载方法

CUDA / CUDA Thrust中的多态性和派生类

引用派生类时基类的对象大小

为什么在派生类中调用方法会调用基类方法?

将指针或引用传递给派生类,以便调用基类方法

从基类方法返回对派生类的引用

为什么派生类指针指向基类可以调用派生类成员函数?

有没有办法使用派生类中的数据使用基类指针调用方法?

我怎样才能让派生类的对象具有“引用”基类实例的成员?

为什么当我在监视视图中观察基类对象时,VS2017为什么向我显示派生类的成员值?

对派生类对象的基类引用

从基类析构函数调用派生类方法