你好我有我的Java练习这些类:矩形和椭圆。是矩形的方形的孩子还是我应该做特殊的构造函数?形状的类层次结构
// constructor for Square
public Rectangle(double side) {
this.width = side;
this.height = side;
}
椭圆的圆形子(扩展)?
这可能是一个简单的应用程序,如Kojo或Geogebra。
你好我有我的Java练习这些类:矩形和椭圆。是矩形的方形的孩子还是我应该做特殊的构造函数?形状的类层次结构
// constructor for Square
public Rectangle(double side) {
this.width = side;
this.height = side;
}
椭圆的圆形子(扩展)?
这可能是一个简单的应用程序,如Kojo或Geogebra。
是的,这似乎是合理的认为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
}
无论你想创建的具体子类来表示这些形状是由你,你应该做哪个更有意义在你的程序中。
这里的问题是:你是否创建了这个层次结构或仅仅是为了设计的缘故?
如果您正在为设计进行设计,请创建一个延伸自Rectangle
的类,否则只会让您的代码更加复杂而没有任何实际的改进。你可以应用相同的圆/椭圆问题
也不! 两者都应该是抽象形状的子类。您可能想在此基类中进行一些坐标转换,以便子类可以简单地实现以原点为中心的圆或方形。但是你不希望其中一个是另一个的子类。
为什么? 因为你必须设计行为/接口,而不是数据!根据我的经验,设计数据几乎总是会导致令人费解的设计。
而且,除非您有具体的理由实际提供圆/矩形类(请参阅下面的注释),否则为圆形添加额外的类似乎不是一个好主意,因为您已经有一个椭圆,只是多余的代码。我会使用专门的构造函数来构造更多的约束情况。
它应该是子接口。 –
你的练习的任务是什么? – Behe
对我来说不清楚,圈子类在哪里? – Sello