我有一个ArrayClass
,mergeSortArray
扩展了它。 mergeSortArray
包含mergeSort()
方法。但是,由于我使用super
从超类调用构造函数,我不知道如何引用mergeSortArray(子类对象/数组)并将其作为mergeSort
方法中的参数传递。事实上,这是否可行?我知道我可以用非OOP方式做到这一点。但是,我很想知道如何以OOP方式执行此操作。
如果我说错了,请纠正我,因为我是Java新手,我想了解更多相关信息。
// ArrayClass Object
import java.util.*;
import java.io.*;
import java.math.*;
public class ArrayClass{
public int[] input_array;
public int nElems;
public ArrayClass(int max){
input_array = new int [max];
nElems = 0;
}
public void insert(int value){
input_array[nElems++] = value;
}
public void display(){
for(int j = 0; j < nElems; j++){
System.out.print(input_array[j] + " ");
}
System.out.println("");
}
}
import java.io.*;
import java.util.*;
import java.math.*;
class mergeSortArray extends ArrayClass{
public mergeSortArray(int max){
super(max);
}
public void methodOne(){
int[] output_array = new int[super.nElems];
mergeSort( // ************* // ,output_array,0, super.nElems -1);
}
................
}
我不确定应该替换******
,以便将mergeSortArray
作为参数传递给mergeSort
方法。
答案 0 :(得分:1)
没有mergeSortArray
。你继承input_array
之类的(并且你也不需要super.nElems
继承),
mergeSort( input_array, output_array, 0, nElems - 1);
您的子类将继承protected
或更高可见度(而不是private
)的所有内容,但是您的ArrayClass
会为您提供两个公共字段
public int[] input_array;
public int nElems;
它们应该是protected
并且具有访问方法(getter)。
protected int[] input_array;
protected int nElems;
public int size() {
return nElems;
}
public int[] getInputArray() {
return input_array;
}
答案 1 :(得分:1)
首先,我建议你不要在OO代码上有公共字段。你有两个公共字段(input_array和nElems),如果需要,你应该将它们更改为私有字段并创建代理字段。
然后,要引用子类上的那些字段,如果您希望隐藏API的其余部分或protected
,那么您可以使用public
acessor,如果它&# 39;是您的公共API的一部分。那样,在你的ArrayClass上:
public class ArrayClass {
private int[] input_array;
private int nElems;
//this may be public
protected int[] getInputArray() {
return input_array;
}
当您调用mergeSort方法时,可以使用getInputArray()