用Java写一个有一个已知的二维坐标系,在坐标系中定义了若干种规则的图形:圆、正方形、矩形和椭圆。使用任意语言进行面向对象的程序设计:首先考虑数据封装性,考虑继承性,考虑抽象类。并打印出来
时间: 2024-09-27 10:16:28 浏览: 0
在Java中,我们可以创建一个名为`Shape`的抽象基类,然后分别定义`Circle`, `Square`, `Rectangle`和`Ellipse`作为其子类,遵循面向对象的设计原则:
```java
// Shape抽象类
abstract class Shape {
protected double x;
protected double y;
public Shape(double x, double y) {
this.x = x;
this.y = y;
}
// 抽象方法,打印形状的基本信息
abstract void printInfo();
}
// 圆形类 Circle
class Circle extends Shape {
private final double radius;
public Circle(double x, double y, double radius) {
super(x, y);
this.radius = radius;
}
@Override
void printInfo() {
System.out.println("Circle at (" + x + ", " + y + ") with radius " + radius);
}
}
// 正方形类 Square
class Square extends Shape {
private double side;
public Square(double x, double y, double side) {
super(x, y);
this.side = side;
}
@Override
void printInfo() {
System.out.println("Square at (" + x + ", " + y + ") with side length " + side);
}
}
// 矩形类 Rectangle
class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double x, double y, double width, double height) {
super(x, y);
this.width = width;
this.height = height;
}
@Override
void printInfo() {
System.out.println("Rectangle at (" + x + ", " + y + ") with width " + width + " and height " + height);
}
}
// 椭圆类 Ellipse
class Ellipse extends Shape {
private double majorAxis;
private double minorAxis;
public Ellipse(double x, double y, double majorAxis, double minorAxis) {
super(x, y);
this.majorAxis = majorAxis;
this.minorAxis = minorAxis;
}
@Override
void printInfo() {
System.out.println("Ellipse at (" + x + ", " + y + ") with major axis " + majorAxis + " and minor axis " + minorAxis);
}
}
public class Main {
public static void main(String[] args) {
Circle circle = new Circle(0, 0, 5);
Square square = new Square(5, 5, 4);
Rectangle rectangle = new Rectangle(10, 10, 8, 6);
Ellipse ellipse = new Ellipse(15, 15, 7, 3);
circle.printInfo();
square.printInfo();
rectangle.printInfo();
ellipse.printInfo();
}
}
```
在这个例子中,`Shape`是抽象的,它的子类如`Circle`, `Square`, `Rectangle`, 和 `Ellipse`都实现了`printInfo()`方法来显示各自的特性。运行`Main`类会打印出每个图形的信息。