簡體   English   中英

Java OOP:引用子類對象

[英]Java OOP: referencing subclass object

我有一個ArrayClassmergeSortArray擴展它。 並且mergeSortArray包含mergeSort()方法。 但是,由於我使用super從超類調用構造函數,所以我不知道如何引用mergeSortArray(子類對象/數組)並將其作為參數傳遞給mergeSort方法。 實際上,這是否可行? 我知道我可以通過非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方法中。

沒有mergeSortArray 你繼承input_array像(和不需要super.nElems你繼承太)

 mergeSort( input_array, output_array, 0, nElems - 1);

您的子類將繼承protected或具有更高可見性的所有內容(不是private ),但是ArrayClass會為您提供兩個公共字段

public int[] input_array;
public int nElems;

它們可能應該protected並具有訪問器方法(獲取程序)。

protected int[] input_array;
protected int nElems;
public int size() {
  return nElems;
}
public int[] getInputArray() {
  return input_array;
}

首先,我建議您不要在OO代碼上使用公共字段。 您有兩個公共字段(input_array和nElems),應將它們更改為private並在需要時創建acessor。

然后,要引用子類上的這些字段,可以使用protected acessor(如果您希望對API的其余部分隱藏acessor),也可以使用public (如果它是公共API的一部分)。 這樣,在您的ArrayClass上:

public class ArrayClass {
    private int[] input_array;
    private int nElems;

    //this may be public
    protected int[] getInputArray() {
        return input_array;
    }

當您調用mergeSort方法時,可以使用getInputArray()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM