我遇到的问题是:
写一个封装形状的抽象超类:一个形状有两个抽象方法:一个返回形状的周长,另一个返回鞋子的区域。它还有一个名为PI的常量字段。这个类有两个非抽象的子类:一个封装一个圆圈,另一个封装一个矩形。圆圈有一个附加属性,即半径。矩形有2个附加属性,即宽度和高度。您还需要包含一个客户端类来测试这两个类。
这是我完成的工作:
Shape.java
public abstract class Shape
{
public abstract double getPerimeter();
public abstract double getArea();
}
Circle.java
public class Circle extends Shape
{
private double radius;
final double pi = Math.PI;
//Defualt Constructor, calls Shape default constructor
public Circle()
{
//Set default value to radius
this.radius = 1;
}
public Circle(double radius)
{
this.radius = radius;
}
public double getArea()
{
//Return πr^2 (area formula)
//Use Math.pow method (page 141) in order to calculate exponent
return (pi * Math.pow(radius, 2));
}
public double getPerimeter()
{
//Return 2πr (perimeter formula)
return (2 * pi * radius);
}}
Rectangle.java
public class Rectangle extends Shape
{
private double width, height;
public Rectangle()
{
//set default value to width and height
this.width = 1;
this.height = 1;
}
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
public double getArea()
{
return width * height;
}
public double getPerimeter()
{
return 2 * (width + height);
}}
ShapeClient.java
public class ShapeClient {
public static void main(String [] args)
{
// To test Rectangle...
double width = 13, length = 9;
Shape rectangle = new Rectangle(width, length);
System.out.println("The rectangle width is: " + width
+ " and the length is: " + length
+ "The area is: " + rectangle.getArea()
+ "and the perimeter is: " + rectangle.getPerimeter() + ".");
//To test Circle...
double radius = 3;
Shape circle = new Circle(radius);
System.out.println("The radius of the circle is: " + radius
+ "The area is: " + circle.getArea()
+ "and the perimeter is: " + circle.getPerimeter() + ".");
}}
我的问题是:PI的常量字段是否需要在Shape类而不是Circle类中?如果是这样,我应该如何将它从圆圈类中取出,我应该如何将它放在Shape类中?
答案 0 :(得分:1)
PI属性肯定需要在Circle类上。抽象Shape类应该包含其所有子类将要使用或实现的属性和方法。在这种情况下,Rectangle类不需要PI属性。
答案 1 :(得分:1)
抽象类应该只包含字段&适用于所有形状的通用方法,例如getArea
和getPerimeter
。
在这种情况下,PI
仅针对Circle
形状或重新定义,广场对常量PI
没有用处。因此,PI
只应位于“圈子”中。 class而不是Shape
类。
答案 2 :(得分:0)
将常量移动到抽象类。