Java OOP:引用子类对象

时间:2014-12-02 00:49:43

标签: java oop

我有一个ArrayClassmergeSortArray扩展了它。 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方法。

2 个答案:

答案 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()