A Circleobject consists ofa radius. When adding a height to a circle object, a Cylinderobject can be made. A Cylinderobject consists ofa radiusand a height. A default circlecontains a radiusof 1. A default cylindercontains a radiusof 1 and a heightof 1. Assume that both radiusand heightare non-negative integers.Designand implementCircleclass and Cylinderclass. Class Circlemust be the superclass of class Cylinder. Class Circlecannothave any superclass except the ultimate superclass Object. When instantiating the two classes, circles and cylinders can be made and stored in an array list as shown below. publicstaticvoidmain(String[] args){ArrayList<Circle> shapes = newArrayList<Circle>();//Creates a list of circles and cylinders.shapes.add(newCircle());shapes.add(newCircle(5));shapes.add(newCylinder());shapes.add(newCylinder(10,5));//Prints the list.for(Circle next: shapes){System.out.println(next);} }a.Draw an UML diagram to show the design. Visibility modifiers, void/value return type, names, and parameter types are required. (10 points)b.Implement both classes by including only the following members in each of the classes.(35 points each class. 70pointsin total)•instance variables•overloading constructors•getters/setters•overriding toString•overriding equals You must use thisreference and superreference when appropriate. Correct Java syntax is required. No Javadoc style comments are required.
时间: 2024-03-29 12:34:09 浏览: 56
a. 下面是 Circle 类和 Cylinder 类的 UML 图:
```
+--------------------------------+
| Circle |
+--------------------------------+
| - radius: int |
+--------------------------------+
| + Circle() |
| + Circle(radius: int) |
| + getRadius(): int |
| + setRadius(radius: int): void |
| + getArea(): double |
| + toString(): String |
| + equals(obj: Object): boolean |
+--------------------------------+
^
|
|
|
|
|
|
+--------------------------------+
| Cylinder |
+--------------------------------+
| - height: int |
+--------------------------------+
| + Cylinder() |
| + Cylinder(radius: int, height: int)|
| + getHeight(): int |
| + setHeight(height: int): void |
| + getVolume(): double |
| + toString(): String |
| + equals(obj: Object): boolean |
+--------------------------------+
```
b. 下面是 Circle 类的实现:
```java
public class Circle {
private int radius;
public Circle() {
this.radius = 1;
}
public Circle(int radius) {
this.radius = radius;
}
public int getRadius() {
return radius;
}
public void setRadius(int radius) {
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public String toString() {
return "Circle[radius=" + radius + "]";
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Circle) {
Circle other = (Circle) obj;
return radius == other.radius;
}
return false;
}
}
```
下面是 Cylinder 类的实现:
```java
public class Cylinder extends Circle {
private int height;
public Cylinder() {
super();
this.height = 1;
}
public Cylinder(int radius, int height) {
super(radius);
this.height = height;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public double getVolume() {
return super.getArea() * height;
}
@Override
public String toString() {
return "Cylinder[radius=" + getRadius() + ",height=" + height + "]";
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Cylinder) {
Cylinder other = (Cylinder) obj;
return super.equals(other) && height == other.height;
}
return false;
}
}
```
在这两个类中,我们使用了继承、多态、重载构造函数、封装等面向对象编程的概念,同时重写了 `toString` 和 `equals` 方法,以便可以在输出和比较对象时得到更加友好的结果。
阅读全文