gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:52:59 24 4
gpt4 key购买 nike

我正在尝试实现一个简单的 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/

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