gpt4 book ai didi

Java:接口(interface)和抽象类的实现

转载 作者:行者123 更新时间:2023-12-02 06:19:12 25 4
gpt4 key购买 nike

我正在尝试构建一个程序,在其中对 int 数组进行排序时可以直观地表示它们。将有两种不同的搜索算法可供选择。所有功能都分为类、接口(interface)和抽象类。我的主要问题是将数据从一件事转移到另一件事。

我的主类实现基本的窗口功能。绘制窗口,几个用于选择搜索算法的按钮,提供一个用于输入数组的文本字段,并在其中心显示数组的条形图可视化。绘制条形是在扩展 JComponent 的类中完成的。这也是我将数字字符串转换为 int 数组的地方。我已经可以绘制图表,更改数组,并且它也会被绘制。

现在我有一个名为 Sorter 的接口(interface),它提供以下方法。

public void setUpTo( int i ); // to limit the number of swaps during the search
public void setNumbers( int[] numbers );
public void sort();
public String getName();
public int getSwaps();

然后我有实现 Sorter 的抽象类 CountingSort 和扩展 CountingSort 的类 CountingBubbleSort。< br/>这让我很困惑。
在我的主类中,我监听一个按钮来传递 TextField 的内容并开始排序。我需要做什么才能通过 CountingSort 将 int 数组获取到 CountingBubbleSort 中?我已经实现了 CountingBubbleSort

让我知道我需要提供哪些附加信息。

最佳答案

如果您向 Sorter 接口(interface)添加另一个方法 (getNumbers()),它将保证所有 Sorter 实现都具有内部 int 数组的 getter 和 setter。

interface Sorter {
public int[] getNumbers();
public void setNumbers(int [] numbers);
//... other methods....
}

然后,如果您在抽象 CountingSort 类中像这样实现它,那么您将能够使用这些方法,而无需在所有子类中实现它们。

abstract class CountingSort implements Sorter{
private int [] mNumbers;

@Override
public int[] getNumbers() {
return mNumbers;
}

@Override
public void setNumbers(int[] numbers) {
mNumbers = numbers;
}
}

然后,如果您设置了它们,您就可以随时访问具体实现中的数字。我建议在 CountingBubbleSort 中使用构造函数,它采用 int 数组(或随机生成它,但您想创建它)。这个构造函数可能会移动到抽象类:

class CountingBubbleSort extends CountingSort{
public CountingBubbleSort(int [] numbers){
setNumbers(numbers);
}

public void someOtherMethod(){
int [] numbers = getNumbers();
}
}

在你的主类中,你可以使用继承所提供的功能,如下所示:

class MainClass {
private Sorter mSorter;

public void doSort(){
//Create sorter objects
if(you want CountingBubbleSort){
mSorter = new CountingBubbleSort();
}else{
mSorter = new BubbleSort();
}
//get the numbers
int [] numbers = mSorter.getNumbers();

// do the sorting
mSorter.sort();
}
}

关于Java:接口(interface)和抽象类的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164505/

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