2014-12-02 98 views
0

我有一個ArrayClassmergeSortArray擴展它。並且mergeSortArray包含mergeSort()方法。然而,因爲我用super來調用超類的構造函數,所以我不知道如何引用mergeSortArray(子類對象/數組),並將其作爲mergeSort方法中的參數傳遞。事實上,這是否可行?我知道我可以以非OOP的方式做到這一點。不過,我很想知道如何以OOP的方式做到這一點。Java 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方法。

回答

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; 
} 
+0

@Elliott_Frisch如果變量'在ArrayClass protected',子類可以訪問他們(因爲他們不是私人的)。在這種情況下,爲什麼我仍然要指定'public int size()'和'public int [] getInputArray()'實例方法? – mynameisJEFF 2014-12-02 01:10:30

+0

這些是訪問器方法。一般都希望公開這些字段(就像他們在你的問題中一樣)。 – 2014-12-02 01:53:28

+0

但如果這些字段是受保護的,我可以在沒有訪問器方法的情況下訪問它們。那麼爲什麼需要訪問器方法? – mynameisJEFF 2014-12-02 02:10:51

1

首先,我建議你不要在OO代碼上有公共字段。你有兩個公有字段(input_array和nElems),你應該把它們改爲私有的,如果你需要的話可以創建一個。

然後,要引用子類上的這些字段,如果您希望將acessor從API的其餘部分或public之一隱藏(如果它是您的公共API的一部分),則可以使用protected處理器。這樣一來,你的ArrayClass:

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

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

,當你打電話給你的歸併方法,你可以使用getInputArray()