用java编写超类 Circle派生了一个称为 Cylinder 的子类,如下方类图所示。研究子类 Cylinder 如何调用超类 Circle 的构造函数,并从超类继承和使用方法 getArea()。 Circle 属性 radius:圆半径。 color:圆颜色。 构造方法 Circle():初始化属性。 public Circle(double radius)。 public Circle(double radius,String color)。 方法 两个属性的set和get方法。 getArea():返回圆的面积。 toString(): 返回Circle[radius=xxx,color=xxx]。 Cylinder 属性 height:圆柱的高。 构造方法 Cylinder():初始化属性。 Cylinder(double height)。 Cylinder(double radius,double height)。 Cylinder(double radius, double height,String color)。 方法 属性height的set和get方法。 getVolume():返回圆柱体的体积(圆柱体体积计算公式为底面积x高)。 题目要求 根据题目描述和类图,完成圆和圆柱类。 注:在main方法当中测试类中的属性、方法、构造器。
时间: 2023-11-27 07:50:36 浏览: 105
以下是代码实现及解析:
Circle.java:
```
public class Circle {
private double radius;
private String color;
public Circle() { // 无参构造方法
this.radius = 1.0;
this.color = "red";
}
public Circle(double radius) { // 有参构造方法1
this.radius = radius;
this.color = "red";
}
public Circle(double radius, String color) { // 有参构造方法2
this.radius = radius;
this.color = color;
}
public double getRadius() { // 获取半径
return radius;
}
public void setRadius(double radius) { // 设置半径
this.radius = radius;
}
public String getColor() { // 获取颜色
return color;
}
public void setColor(String color) { // 设置颜色
this.color = color;
}
public double getArea() { // 计算面积
return Math.PI * radius * radius;
}
public String toString() { // 输出信息
return "Circle[radius=" + radius + ",color=" + color + "]";
}
}
```
Cylinder.java:
```
public class Cylinder extends Circle {
private double height;
public Cylinder() { // 无参构造方法
super(); // 调用父类的无参构造方法
this.height = 1.0;
}
public Cylinder(double height) { // 有参构造方法1
super(); // 调用父类的无参构造方法
this.height = height;
}
public Cylinder(double radius, double height) { // 有参构造方法2
super(radius); // 调用父类的有参构造方法1
this.height = height;
}
public Cylinder(double radius, double height, String color) { // 有参构造方法3
super(radius, color); // 调用父类的有参构造方法2
this.height = height;
}
public double getHeight() { // 获取高
return height;
}
public void setHeight(double height) { // 设置高
this.height = height;
}
public double getVolume() { // 计算体积
return getArea() * height;
}
public String toString() { // 输出信息
return "Cylinder[" + super.toString() + ",height=" + height + "]";
}
}
```
在 main 函数中测试:
```
public static void main(String[] args) {
Circle circle1 = new Circle(); // 测试Circle类的无参构造方法
System.out.println(circle1.toString()); // 输出信息
Circle circle2 = new Circle(2.0); // 测试Circle类的有参构造方法1
System.out.println(circle2.toString()); // 输出信息
Circle circle3 = new Circle(3.0, "blue"); // 测试Circle类的有参构造方法2
System.out.println(circle3.toString()); // 输出信息
Cylinder cylinder1 = new Cylinder(); // 测试Cylinder类的无参构造方法
System.out.println(cylinder1.toString()); // 输出信息
Cylinder cylinder2 = new Cylinder(2.0); // 测试Cylinder类的有参构造方法1
System.out.println(cylinder2.toString()); // 输出信息
Cylinder cylinder3 = new Cylinder(3.0, 4.0); // 测试Cylinder类的有参构造方法2
System.out.println(cylinder3.toString()); // 输出信息
Cylinder cylinder4 = new Cylinder(3.0, 4.0, "green"); // 测试Cylinder类的有参构造方法3
System.out.println(cylinder4.toString()); // 输出信息
System.out.println("circle1's area is " + circle1.getArea()); // 测试Circle类的计算面积方法
System.out.println("cylinder4's volume is " + cylinder4.getVolume()); // 测试Cylinder类的计算体积方法
}
```
输出结果:
```
Circle[radius=1.0,color=red]
Circle[radius=2.0,color=red]
Circle[radius=3.0,color=blue]
Cylinder[Circle[radius=1.0,color=red],height=1.0]
Cylinder[Circle[radius=1.0,color=red],height=2.0]
Cylinder[Circle[radius=3.0,color=red],height=4.0]
Cylinder[Circle[radius=3.0,color=green],height=4.0]
circle1's area is 3.141592653589793
cylinder4's volume is 113.09733552923254
```
可以看到,子类 Cylinder 中通过调用 super() 方法来调用父类 Circle 的构造函数,从而初始化父类中的属性。并且子类 Cylinder 通过继承父类 Circle 的方法 getArea() 来实现计算圆柱体的体积方法 getVolume()。
阅读全文