2013-06-30 99 views
0

你好我有我的Java练习这些类:矩形和椭圆。是矩形的方形的孩子还是我应该做特殊的构造函数?形状的类层次结构

// constructor for Square 
public Rectangle(double side) { 
    this.width = side; 
    this.height = side; 
} 

椭圆的圆形子(扩展)?

这可能是一个简单的应用程序,如Kojo或Geogebra。

+0

它应该是子接口。 –

+0

你的练习的任务是什么? – Behe

+0

对我来说不清楚,圈子类在哪里? – Sello

回答

2

是的,这似乎是合理的认为Square的作为Rectangle一个子类为其中两个的宽度和高度是相等的:

public Square(double side) { 
    super(side, side); // reference to Rectangle constructor 
} 

类似地,同样可以为Circle可以说,它实质上是椭圆形的其中两个主要和次要半径相等:

public Circle(double radius) { 
    super(radius, radius); // reference to Ellipse constructor 
} 

无论你想创建的具体子类来表示这些形状是由你,你应该做哪个更有意义在你的程序中。

+1

谢谢,这真的帮了我。 – uetoyo

+0

@ user2490538很高兴能提供帮助:) – arshajii

1

这里的问题是:你是否创建了这个层次结构或仅仅是为了设计的缘故?

如果您正在为设计进行设计,请创建一个延伸自Rectangle的类,否则只会让您的代码更加复杂而没有任何实际的改进。你可以应用相同的圆/椭圆问题

1

也不! 两者都应该是抽象形状的子类。您可能想在此基类中进行一些坐标转换,以便子类可以简单地实现以原点为中心的圆或方形。但是你不希望其中一个是另一个的子类。

为什么? 因为你必须设计行为/接口,而不是数据!根据我的经验,设计数据几乎总是会导致令人费解的设计。

而且,除非您有具体的理由实际提供圆/矩形类(请参阅下面的注释),否则为圆形添加额外的类似乎不是一个好主意,因为您已经有一个椭圆,只是多余的代码。我会使用专门的构造函数来构造更多的约束情况。

+0

两个* can *都是抽象类Shape的子类,它们之间也是等级连接的。另外,我不同意冗余代码。虽然它更多地依赖于OP所要做的事情,但是当创建一个应该易于使用和理解的公共API时,可能有一个独立的'Circle'类(意思是“甚至不需要任何多余的代码,因为一切都将在'椭圆'中处理)。 “Square”同样如此。 – arshajii

+0

也就是说,我会使用专门的构造函数,但我仍然认为,您在这里有一个要点。更新了答案以反映这一点。 – cmaster