java - 访问对象(动态选择的)子类的函数

标签 java class inheritance superclass static-typing

我正在尝试实现一个简单的 binary heap用户可以在其中选择他们想要最小堆还是最大堆的类。

我做了父类(super class)抽象:

abstract class Heap 
{
    size() { ... }

    peek() { ... }
}

main 方法选择实例化 maxHeap 或 minHeap 子类。

public static void main(String[] args)
{
    Heap myHeap = new minHeap();
    if ( /* some condition */ )
        myHeap = new maxHeap();   
}

myHeap.insert(/* some value */);

插入函数在最小堆和最大堆类中的实现方式不同:

class minHeap extends Heap
{
    public void insert() { ... }
}

class maxHeap extends Heap
{
    public void insert() { ... }
}

当然,从 main 调用 insert() 会抛出一个错误,因为在 Heap 类中没有这样的方法。在非常相似的最小堆和最大堆实现之间以编程方式进行选择的最佳方式是什么?

最佳答案

insert 在这两种情况下似乎具有相同的签名,因此您可以将它拉到父类(super class)中。只要签名相同,它们的实现方式是否不同并不重要。

然后你的 Heap 类变成了

abstract class Heap 
{
    size() { ... }

    peek() { ... }

    abstract void insert();
}

关于java - 访问对象(动态选择的)子类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29814682/

相关文章:

c++ - 运行时多态性到底是什么意思?

java - java中的错误划分

java - 在ListView中加载多个布局

java - 如何在小程序中运行该程序?

php - 如何使用 init 文件连接到 redis 服务器,没有 passwd

c# - C#或者底层的CLR真的不支持多重继承吗?

java - 如何在 JAR list 文件中指定类路径加载顺序

c++ - 非静态数据成员 c++ 的无效使用

iOS 在类方法中使用未声明的标识符来创建新实体

java - 从父函数/作用域访问子属性