编写一个包含3个类以上的Java程序,要求用到成员变量的隐藏、方法的重写和上转型对象。
时间: 2024-11-11 07:25:26 浏览: 23
在Java中,我们可以编写一个简单的图形类体系,比如Shape(形状)、Circle(圆形)和Square(正方形),其中Circle和Square都是Shape的子类。这样就可以演示成员变量的隐藏、方法的重写以及上转型对象的概念。
首先,我们有一个基础的Shape类,它有一个公共成员变量area和一个计算面积的方法:
```java
class Shape {
protected double area; // 隐藏的成员变量
public Shape(double area) {
this.area = area;
}
// 上转型方法,用于返回Shape类型的引用
public Shape getShape() {
return this;
}
// 计算面积的方法
public double calculateArea() {
return area;
}
}
```
接着,Circle和Square分别继承自Shape,并有自己的特点:
```java
class Circle extends Shape {
private double radius;
public Circle(double radius, double area) {
super(area);
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius; // 重写了父类的方法
}
}
class Square extends Shape {
private double side;
public Square(double side, double area) {
super(area);
this.side = side;
}
@Override
public double calculateArea() {
return side * side; // 重写了父类的方法
}
}
```
最后,在主程序中,我们可以创建任意形状的对象,通过上转型来统一处理:
```java
public class Main {
public static void main(String[] args) {
Shape circleObj = new Circle(5, Math.PI * 5 * 5); // 圆形对象
Shape squareObj = new Square(4, 4 * 4); // 正方形对象
System.out.println("Circle Area: " + circleObj.calculateArea()); // 输出圆的面积
System.out.println("Square Area: " + squareObj.calculateArea()); // 输出方的面积
// 上转型
Shape shape = circleObj; // 圈对象转换为Shape类型
System.out.println("Shape's Area: " + shape.calculateArea()); // 输出圆的面积
}
}
```
在这个程序中,`calculateArea()`方法被重写以适应每个子类的具体需求,而`area`成员变量在Shape类中是隐藏的,只有其子类能够访问或改变。同时,`getShape()`方法展示了上转型对象的概念,允许我们用更通用的方式处理Shape类型的对象。
阅读全文