编写一个包含4个类以上的Java程序,要求有至少3个类存在继承关系,在父类中分别使用public、protected、friendly、private等权限修饰符修饰成员变量和方法,并观察在不同的包中子类继承的不同特点。及实验原理
时间: 2024-12-12 11:19:12 浏览: 8
在Java中,访问控制符用于确定其他类对当前类内部元素的可见性和访问范围。主要有四种访问修饰符:public(公共)、protected(受保护)、default(包内可见)和private(私有的)。我们来看一下如何创建一个包含4个类并涉及继承关系的示例:
```java
// 定义一个包 com.example.base
package com.example.base;
// 父类 PublicClass,所有成员公有
public class PublicClass {
public String publicVariable;
public void publicMethod() {
System.out.println("This is a public method in PublicClass.");
}
}
// 另一个包 com.example.child1,继承PublicClass
package com.example.child1;
import com.example.base.PublicClass; // 导入父类
// 子类 Child1,只能访问父类的公有成员
public class Child1 extends PublicClass {
// 如果尝试访问父类的protected或private成员会抛异常
// protectedString 和 privateMethod 无法在这里直接访问
}
// 第三个包 com.example.child2,继承PublicClass
package com.example.child2;
import com.example.base.PublicClass; // 导入父类
// 子类 Child2,除了公有成员外,还可以访问父类的受保护成员
public class Child2 extends PublicClass {
// protectedString 可以访问,因为Child2和PublicClass在同一包下
protected String protectedVariable;
// 但是 privateMethod 仍然无法访问
}
// 最后一个包 com.example.privatechild,继承PublicClass
package com.example.privatechild;
import com.example.base.PublicClass; // 导入父类
// 子类 PrivateChild,只有在本类中可以访问私有成员
private class PrivateChild extends PublicClass {
private String privateVariable;
private void privateMethod() {
// 这里可以访问,因为是在PrivateChild内部
}
}
```
实验原理:
1. **公共**(public):在任何地方都可见,所有类都可以实例化和访问。
2. **受保护**(protected):在同包和其子包中可见,非子类不能直接访问。
3. **默认**(无关键字):仅限于同包内的类可见,子类可以在包内访问。
4. **私有**(private):仅限于声明它的类内部可见,外部完全不可见。
通过这个例子,我们可以看到继承带来的代码复用,以及权限修饰符如何影响类间的交互。每个子类只能访问它们声明为相应访问级别的父类成员。
阅读全文