Java:接口和抽象类的实现

时间:2014-01-16 14:28:33

标签: java arrays interface abstract-class

我正在尝试构建一个程序,在这个程序中我有一个int数组的可视化表示,同时它们被排序。将有两种不同的搜索算法可供选择。所有功能都分为类,接口和抽象类。我的主要问题是将数据从一件事情转移到另一件事情。

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

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

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();

然后我有实现CountingSort的抽象类Sorter和扩展CountingBubbleSort的类CountingSort
这对我来说非常困惑。
在我的主类中,我听一个按钮来传递TextField的内容并开始排序。 我需要做什么才能将CountingSort中的int数组导入CountingBubbleSort? 我已经实施了CountingBubbleSort

让我知道我需要提供哪些其他信息。

1 个答案:

答案 0 :(得分:2)

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

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();
    }
}