修饰的代码,只能够在代码所属类里面,任意地方引用
修饰的代码,只能够在代码类所属包下面的所有类里面,任意地方引用
修饰的代码,只能够在本类以及所有子类里面,无论子类在哪个包下,任意地方引用
修饰的代码,能够在所有类里面,任意地方引用
//外部类
public class OuterClass {
public static void main(String[] args) {
// 创建静态内部类实例
StaticNestedClass nested = new StaticNestedClass();
nested.displayMessage();
}
// 静态内部类定义
public static class StaticNestedClass {
private String message = "Hello from Static Nested Class";
// 公共方法用于显示消息
public void displayMessage() {
System.out.println(message);
}
}
}
//调用内部类静态成员示例:
System.out.println(OuterClass.StaticNestedClass.staticField);
OuterClass.StaticNestedClass.静态成员
//创建静态内部类对象示例:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
inner.非静态成员
//外部类
public class OuterClass {
private String outerMessage = "Hello from Outer Class";
// 普通内部类定义
public class InnerClass {
public void displayOuterMessage() {
System.out.println(outerMessage); // 直接访问外部类的字段
}
}
public void createAndUseInnerClass() {
// 创建并使用普通内部类的实例
InnerClass inner = new InnerClass();
inner.displayOuterMessage();
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.createAndUseInnerClass();
}
}
//创建非静态内部类对象示例:
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.非静态成员
3-2 外部类可以访问内部类的各种权限级别成员
3-3 非静态内部类可以访问外部类的所有静态、非静态成员,包括私有(private)、默认(package-private)、受保护(protected)和公共(public)级别的成员变量和方法。
public class LocalInnerClassExample {
public void someMethod() {
// 局部内部类定义在方法内
class LocalClass {
String message = "Hello from Local Inner Class";
void displayMessage() {
System.out.println(message);
}
}
// 创建并使用局部内部类的实例
LocalClass local = new LocalClass();
local.displayMessage();
}
public static void main(String[] args) {
LocalInnerClassExample example = new LocalInnerClassExample();
example.someMethod(); // 在外部类的方法中调用,创建并使用局部内部类
}
}
import java.util.ArrayList;
import java.util.List;
public class AnonymousInnerClassExample {
public static void main(String[] args) {
// 使用匿名内部类实现Runnable接口
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Running in anonymous inner class");
}
});
thread.start();
// 或者使用匿名内部类继承自一个抽象类或具体类
List<String> list = new ArrayList<String>() {{
add("Item added by anonymous inner class");
}};
System.out.println(list.get(0));
}
}
总之,选择使用内部类主要考虑的是代码组织、封装性以及逻辑关联性等因素,以提升代码质量和可维护性。