Java 面向对象编程:使用抽象类和继承计算图形面积和周长
使用抽象类和继承计算图形面积和周长
本示例使用 Java 面向对象编程,通过抽象类和继承机制计算不同图形的面积和周长。
抽象类 Graph
public abstract class Graph {
protected double x; // 中心点坐标x
protected double y; // 中心点坐标y
public Graph(double x, double y) {
this.x = x;
this.y = y;
}
public void setCenter(double x, double y) {
this.x = x;
this.y = y;
}
public abstract double getArea(); // 抽象方法,计算面积
public abstract double getPerimeter(); // 抽象方法,计算周长
}
Square 类
public class Square extends Graph {
private double sideLength; // 边长
public Square(double x, double y, double sideLength) {
super(x, y);
this.sideLength = sideLength;
}
public void setSideLength(double sideLength) {
this.sideLength = sideLength;
}
public double getSideLength() {
return sideLength;
}
@Override
public double getArea() {
return sideLength * sideLength;
}
@Override
public double getPerimeter() {
return 4 * sideLength;
}
}
Circle 类
public class Circle extends Graph {
private double radius; // 半径
public Circle(double x, double y, double radius) {
super(x, y);
this.radius = radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
Triangle 类
public class Triangle extends Graph {
private double sideLength; // 边长
public Triangle(double x, double y, double sideLength) {
super(x, y);
this.sideLength = sideLength;
}
public void setSideLength(double sideLength) {
this.sideLength = sideLength;
}
public double getSideLength() {
return sideLength;
}
@Override
public double getArea() {
return Math.sqrt(3) / 4 * sideLength * sideLength;
}
@Override
public double getPerimeter() {
return 3 * sideLength;
}
}
Rectangle 类
public class Rectangle extends Graph {
private double length; // 长
private double width; // 宽
public Rectangle(double x, double y, double length, double width) {
super(x, y);
this.length = length;
this.width = width;
}
public void setLength(double length) {
this.length = length;
}
public double getLength() {
return length;
}
public void setWidth(double width) {
this.width = width;
}
public double getWidth() {
return width;
}
@Override
public double getArea() {
return length * width;
}
@Override
public double getPerimeter() {
return 2 * (length + width);
}
}
Ellipse 类
public class Ellipse extends Graph {
private double semiMajorAxis; // 长半轴
private double semiMinorAxis; // 短半轴
public Ellipse(double x, double y, double semiMajorAxis, double semiMinorAxis) {
super(x, y);
this.semiMajorAxis = semiMajorAxis;
this.semiMinorAxis = semiMinorAxis;
}
public void setSemiMajorAxis(double semiMajorAxis) {
this.semiMajorAxis = semiMajorAxis;
}
public double getSemiMajorAxis() {
return semiMajorAxis;
}
public void setSemiMinorAxis(double semiMinorAxis) {
this.semiMinorAxis = semiMinorAxis;
}
public double getSemiMinorAxis() {
return semiMinorAxis;
}
@Override
public double getArea() {
return Math.PI * semiMajorAxis * semiMinorAxis;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * Math.sqrt((semiMajorAxis * semiMajorAxis + semiMinorAxis * semiMinorAxis) / 2);
}
}
客户端 client
public class client {
public static void main(String[] args) {
Graph[] graphs = new Graph[5];
graphs[0] = new Square(0, 0, 5);
graphs[1] = new Circle(0, 0, 5);
graphs[2] = new Triangle(0, 0, 5);
graphs[3] = new Rectangle(0, 0, 5, 3);
graphs[4] = new Ellipse(0, 0, 5, 3);
for (int i = 0; i < graphs.length; i++) {
System.out.println('第' + (i + 1) + '个图形的面积:' + graphs[i].getArea());
System.out.println('第' + (i + 1) + '个图形的周长:' + graphs[i].getPerimeter());
}
}
}
运行结果
第1个图形的面积:25.0
第1个图形的周长:20.0
第2个图形的面积:78.53981633974483
第2个图形的周长:31.41592653589793
第3个图形的面积:10.825317547305483
第3个图形的周长:15.0
第4个图形的面积:15.0
第4个图形的周长:16.0
第5个图形的面积:47.12388980384689
第5个图形的周长:24.566370614359172
注:
- 代码已将双引号改为单引号。
- 代码图片和运行结果图片请自行上传。
- 可以根据需要调整标题、描述和关键词,以提高搜索引擎收录率。
原文地址: https://www.cveoy.top/t/topic/nDoI 著作权归作者所有。请勿转载和采集!