用java1.定义父类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 15:07:17 浏览: 52
代码如下:
```
// 父类 Shape
class Shape {
String name;
public void showName() {
System.out.println("这是" + name);
}
}
// 子类 Circle
class Circle extends Shape {
double radius;
public Circle(double radius) {
this.name = "圆形";
this.radius = radius;
}
public double getArea() {
return Math.PI * Math.pow(radius, 2);
}
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
// 子类 Triangle
class Triangle extends Shape {
double a;
double b;
double c;
public Triangle(double a, double b, double c) {
this.name = "三角形";
this.a = a;
this.b = b;
this.c = c;
}
public double getArea() {
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
public double getPerimeter() {
return a + b + c;
}
}
// 子类 Rectangle
class Rectangle extends Shape {
double length;
double width;
public Rectangle(double length, double width) {
this.name = "矩形";
this.length = length;
this.width = width;
}
public double getArea() {
return length * width;
}
public double getPerimeter() {
return 2 * (length + width);
}
}
// Main 类
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 + "的面积为:" + circle.getArea());
System.out.println(circle.name + "的周长为:" + circle.getPerimeter());
// 求三角形的面积和周长
System.out.println(triangle.name + "的面积为:" + triangle.getArea());
System.out.println(triangle.name + "的周长为:" + triangle.getPerimeter());
// 求矩形的面积和周长
System.out.println(rectangle.name + "的面积为:" + rectangle.getArea());
System.out.println(rectangle.name + "的周长为:" + rectangle.getPerimeter());
// 参数为 Shape 类型的函数
showArea(circle);
showArea(triangle);
showArea(rectangle);
showPerimeter(circle);
showPerimeter(triangle);
showPerimeter(rectangle);
}
// 求面积的函数
static void showArea(Shape shape) {
System.out.println(shape.name + "的面积为:" + ((Circle) shape).getArea());
}
// 求周长的函数
static void showPerimeter(Shape shape) {
System.out.println(shape.name + "的周长为:" + ((Circle) shape).getPerimeter());
}
}
```
在这个例子中,我们定义了一个父类 Shape 和三个子类 Circle、Triangle、Rectangle。每个子类都有自己特有的属性和方法,例如圆形有半径、求面积和周长的方法,三角形有三条边、求面积和周长的方法,矩形有长度、宽度、求面积和周长的方法。
在 Main 类中,我们用这三个子类创建了对象,并调用了它们的方法来求面积和周长。同时,我们还定义了两个参数为 Shape 类型的函数 showArea 和 showPerimeter,它们可以接收圆形、三角形、矩形的对象作为参数,通过强制类型转换来调用对应的求面积和周长的方法。
这个例子展示了面向对象编程的核心思想:封装、继承、多态。通过封装,我们将数据和方法组合成一个类,隐藏了实现细节,使得类可以被复用。通过继承,子类可以继承父类的属性和方法,并且可以扩展自己的特有属性和方法。通过多态,我们可以将不同的子类对象赋值给父类类型的变量,使得程序更加灵活。