编写一个包含4个类以上的Java程序,要求有至少3个类存在继承关系,在父类中分别使用public、protected、friendly、private等权限修饰符修饰成员变量和方法,并观察在不同的包中子类继承的不同特点。
时间: 2024-11-10 10:26:30 浏览: 34
在Java中,你可以编写一个简单的图形类体系结构来演示这个概念,例如创建一个形状类(Shape),以及其子类如矩形类(Rectangle)、圆形类(Circle)和三角形类(Triangle),这四个类构成了你的基本结构。
首先,我们有一个公共访问修饰符(public)的基类Shape:
```java
public abstract class Shape {
protected String color; // 保护访问的成员变量
public void setColor(String color) { // 公开方法
this.color = color;
}
// 其他公共方法...
}
```
然后,矩形、圆形和三角形类会继承Shape,并使用不同的访问修饰符:
```java
// Rectangle 类
public class Rectangle extends Shape {
private double width, height; // 私有的成员变量
@Override
public void draw() {
System.out.println("Drawing a rectangle with color: " + color);
// 子类可以重写父类的方法
}
}
// Circle 类
class Circle extends Shape {
protected double radius; // 受保护的成员变量
@Override
public void draw() {
System.out.println("Drawing a circle with color: " + color);
}
}
// Triangle 类
class Triangle extends Shape {
// 省略了setters和getters,因为它们默认为private,所以需要提供get方法才能访问
public double getSide1() { return side1; }
// ...其他两个侧边也类似
}
```
在这个例子中:
- `color` 在Shape类中是受保护的,意味着只有它的子类和它本身能访问。
- `width` 和 `height` 在Rectangle类中是私有的,仅限于Rectangle类内部使用。
- `radius` 在Circle类中是受保护的,可以由子类访问,但不是公开的。
当这些类在不同的包中(比如`com.example.shapes.rectangle`, `com.example.shapes.circle`, `com.example.shapes.triangle`)定义时,它们的继承特性不会改变,但是访问控制可能会受到包的限制。如果从另一个包尝试访问私有成员,Java会抛出`IllegalAccessException`。
阅读全文