2017-03-09 65 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