2017-03-09 115 views
-1

我給了一個類PolyShape通過它們的邊數和一個包含它們邊長的數組表示多邊形,並且我必須將它擴展爲一個稱爲四邊形的類,它表示具有4邊的多邊形。我不確定如何解決這個問題。我開始了這個程序,但是有人能幫我解釋一下我應該在數組中包含什麼,以及在這種情況下應該如何使用VarArgs?如何使用繼承來實現VarArgs?

import java.util.Arrays; 

public class PolyShape { 
private int numSides; 
private int[] sideLengths; 

public PolyShape(int ... sideLengths) { 
    this.sideLengths = sideLengths; 
    this.numSides = sideLengths.length; 
} 

public int getNumSides() { 
    return numSides; 
} 
public int[] getSideLengths() { 
    return Arrays.copyOf(sideLengths, sideLengths.length); 
} 
public int getPerimeter() { 
    int perim = 0; 
    for(int n : sideLengths) 
     perim += n; 
    return perim; 
} 
public String toString() { 
    String s = "I am a shape with " + numSides + " sides of length: "; 
    for(int length : sideLengths) 
     s += length + " "; 
    s += "\nI am a polygon."; 
    return s; 
} 
} 

四邊形類:

public class Quadrilateral extends PolyShape { 

private final int POLYGON_SIDES = 4; 

public Quadrilateral(int ... sideLengths) { 
    super(sideLengths); 
} 

public String toString() { 
    String parentString = super.toString(); 
    parentString += "\nI am a Quadrilateral."; 
    return parentString; 
} 
} 
+0

你做了什麼看起來不錯。我想也許你應該做的就是編寫'Quadrilateral'構造函數,這樣必須有四個參數,而不是可變參數。這可能看起來像'public Quadrilateral(int side1,int side2,int side3,int side4){super(side1,side2,side3,side4); }' –

+0

你更可能從http://codereview.stackexchange.com得到任何其他有用的反饋(我絕對可以想到一些) –

+0

@DavidWallace謝謝!這是否意味着我的常數沒有用處?只是爲了擺脫它是否安全?而且我不必包括額外的獲得者和安裝者? – sall

回答

0

您的孩子類是四邊形,它具有4個側面,所以你並不需要創建可變參數方法參數的構造函數。只需在構造函數中傳遞4個邊。將這4個邊傳遞給父構造函數將肯定會用vararg參數調用父構造函數。

0
public Quadrilateral extends PolyShape { 
    public Quadrilateral(int side1, int side2, int side3, int side4) { 
     super(side1, side2, side3, side4); 
    }  
} 
+1

儘管此代碼片段可能會解決此問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – DimaSan