用jdk实现以下要求1.定义父类class Shape{ String name; public void showName(){...........} } 2. 定义子类:圆形,三角形,矩形,包含求周长,求面积等公式; 3. 定义一个Main类,在其main函数中,用这三个子类创建对象,求其面积,周长等; 4. 请在Main类中定义参数为Shape类型的函数: static void showArea(Shape shape) {.............} static void showPerimeter(Shape shape){..............} 将三角形,圆形,矩形的对象传入,理解面向对象的深刻含义
时间: 2023-06-11 13:06:41 浏览: 189
以下是实现代码:
```java
class Shape {
String name;
public void showName() {
System.out.println("Name: " + name);
}
}
class Circle extends Shape {
double radius;
public Circle(double radius) {
this.name = "Circle";
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
class Triangle extends Shape {
double side1;
double side2;
double side3;
public Triangle(double side1, double side2, double side3) {
this.name = "Triangle";
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
public double getArea() {
double p = (side1 + side2 + side3) / 2;
return Math.sqrt(p * (p - side1) * (p - side2) * (p - side3));
}
public double getPerimeter() {
return side1 + side2 + side3;
}
}
class Rectangle extends Shape {
double length;
double width;
public Rectangle(double length, double width) {
this.name = "Rectangle";
this.length = length;
this.width = width;
}
public double getArea() {
return length * width;
}
public double getPerimeter() {
return 2 * (length + width);
}
}
public class Main {
public static void main(String[] args) {
Circle circle = new Circle(5);
Triangle triangle = new Triangle(3, 4, 5);
Rectangle rectangle = new Rectangle(4, 6);
System.out.println(circle.name + " area: " + circle.getArea());
System.out.println(circle.name + " perimeter: " + circle.getPerimeter());
System.out.println(triangle.name + " area: " + triangle.getArea());
System.out.println(triangle.name + " perimeter: " + triangle.getPerimeter());
System.out.println(rectangle.name + " area: " + rectangle.getArea());
System.out.println(rectangle.name + " perimeter: " + rectangle.getPerimeter());
showArea(circle);
showArea(triangle);
showArea(rectangle);
showPerimeter(circle);
showPerimeter(triangle);
showPerimeter(rectangle);
}
static void showArea(Shape shape) {
System.out.println(shape.name + " area: " + ((Triangle) shape).getArea());
}
static void showPerimeter(Shape shape) {
System.out.println(shape.name + " perimeter: " + ((Triangle) shape).getPerimeter());
}
}
```
在这个代码中,我们定义了一个 `Shape` 类作为所有图形的父类,然后定义了三个子类 `Circle`、`Triangle` 和 `Rectangle`,分别对应圆形、三角形和矩形。
每个子类都有自己的特定属性和方法,如 `Circle` 类有 `radius` 属性和计算面积和周长的方法,`Triangle` 类有三个边长属性和计算面积和周长的方法,`Rectangle` 类有长和宽属性和计算面积和周长的方法。
在 `Main` 类的 `main` 方法中,我们创建了三个具体图形的对象,并分别计算它们的面积和周长。
然后我们定义了两个参数为 `Shape` 类型的方法 `showArea` 和 `showPerimeter`,这里我们理解了面向对象的深刻含义——多态性。因为 `Circle`、`Triangle` 和 `Rectangle` 都继承自 `Shape`,所以它们都可以作为 `Shape` 类型的参数传入这两个方法中。在方法内部,我们可以通过强制类型转换来调用具体子类的方法,从而实现对不同图形计算面积和周长的功能。
阅读全文