【发布时间】:2013-11-27 13:27:49
【问题描述】:
我的超类叫做 Polygon:
public class Polygon
{
private double area;
/**
* Constructor for objects of class Rectangle
*/
public Polygon(double area)
{
this.area = area;
}
/**
* Mutator method that sets the area
*/
public void setArea(double area)
{
this.area = area;
}
/**
* Accessor method that returns the area
*/
public double getArea()
{
return area;
}
}
我的 Square 类扩展了 Polgyon:
public class Square extends Polygon
{
private double perimeter;
/**
* Constructor for objects of class Square
*/
public Square(double area)
{
super(area);
}
/**
* calculates the perimeter of the square using area inherited from Polygon
*/
public void calcPerimeter()
{
perimeter = Math.sqrt(getArea()) * 4; //in a square, area is the square root
}
/**
* Accessor method that returns the perimeter
*/
public double getPerimeter()
{
calcPerimeter();
return perimeter;
}
}
除了长度和宽度以及周长之外,我有一个圆形和矩形类几乎相同的东西。
在主类中,我想让用户输入一个区域,然后接收带有该区域的正方形的周长,带有该区域的圆的周长等。我不知道我是否这样做了但是正确...我创建了每个对象并输入了相同的输入。 这是我的主要课程:
public class PolygonMain
{
public static void main(String[] args)
{
double input = Double.parseDouble(args[0]);
Polygon polygon = new Polygon(input);
Square square = new Square(input);
Circle circle = new Circle(input);
Rectangle rectangle = new Rectangle(input);
System.out.println("Area:" + " " + polygon.getArea() + ".");
System.out.println("Perimeter:" + " " + square.getPerimeter() + ".");
System.out.println("Circumference:" + " " + circle.getCircumference() + ".");
System.out.println("Length:" + " " + rectangle.getLength() + ".");
System.out.println("Width:" + " " + rectangle.getWidth() + ".");
}
}
正如您在我的主类中看到的那样,我将用户输入 (args[0]) 放入每个构造函数的参数中.....哪种类型的构造函数的继承部分即 super(area)... 。无用。是否有必要创建每个新形状?另外,如果我要在主类中实现 Scanner 类怎么办?假设用户可以输入面积值并命令返回关于子类形状的信息,然后使用多个面积值来执行此操作?我将如何去做,因为我不知道如何在主类中创建对象。我们刚刚开始使用 Main 方法;我们的类 IDE 是 BlueJ,它不需要它。我希望我的问题不会与它的措辞混淆,如果我的帖子格式错误,我深表歉意,因为这是我的第一篇帖子。谢谢。
PS:我忘了提到忽略正方形是矩形。我的教授犯了一个错误,不小心指示我们从正方形扩展矩形。
PS:除了在主类中,你们建议将每个不同的形状添加到集合中,然后遍历每个形状并打印出属性,你们还有其他选择吗?我将如何使用 Scanner 类来做到这一点?因为在上述情况下,我已经创建了所有对象。我正在尝试在主课上进行尽可能多的练习,因为由于 BlueJ,我严重缺乏它。
【问题讨论】:
-
如果实验室的目的是展示多态性,您可能希望为每种多边形类型创建一个
getArea()方法并在循环中调用它。我会回答给你一个想法。 -
由于您的
Square类继承自Polygon,您应该将外围方法推到Polygon类。其实正方形也是长方形。 -
... 然后
getPerimeter()将仅在Polygon中,而Polygon的每个特定类型(即每个派生类)都将覆盖calculatePerimeter()。 -
@CompuChip:只有多边形形状。
-
@Abdul:对,圆不是多边形,因此不会从多边形继承。这个任务很糟糕。
标签: java inheritance shapes superclass super