在 Java 中,私有内部类(private inner class)指的是被 private 修饰的成员内部类。它只能被外部类内部访问,不能被外部(其他类)直接访问,是一种很强的封装手段。
下面从定义、使用场景、示例代码、要点总结来讲解。
class Outer {
private class Inner {
public void say() {
System.out.println("I am private inner class");
}
}
}
Inner 是 privateOuter 中使用new Outer.Inner()public class Outer {
private class Inner {
public void print() {
System.out.println("Hello from Inner");
}
}
public void useInner() {
Inner inner = new Inner();
inner.print();
}
}
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
outer.useInner();
}
}
✅ 输出:
Hello from Inner
❌ 不能这样写:
Outer.Inner inner = new Outer.Inner(); // 编译错误
因为 Inner 是 private
私有内部类可以直接访问外部类的所有成员(包括 private):
public class Outer {
private String name = "Outer";
private class Inner {
public void show() {
System.out.println(name); // 直接访问
}
}
public void test() {
new Inner().show();
}
}
必须在外部类的方法中创建:
public class Outer {
private class Inner {
}
public Inner createInner() {
return new Inner();
}
}
外部:
Outer outer = new Outer();
Object obj = outer.createInner(); // 只能用 Object 或接口接收
public class Outer {
private class InnerImpl {
void doWork() {}
}
public void work() {
new InnerImpl().doWork();
}
}
外部完全不知道 InnerImpl 存在。
public class Outer {
private class Inner implements Runnable {
public void run() {
System.out.println("Running");
}
}
public Runnable getRunner() {
return new Inner();
}
}
外部只知道 Runnable,不知道实现类。
public class MyList {
private class MyIterator {
void next() {}
}
public Object iterator() {
return new MyIterator();
}
}
| 类型 | 修饰符 | 外部是否可访问 |
|---|---|---|
| 私有内部类 | private |
❌ 不可 |
| 默认内部类 | 无修饰 | ✅(同包) |
| protected 内部类 | protected |
✅(子类 / 同包) |
| public 内部类 | public |
✅ |
private 内部类不能包含 static 成员(除常量)
private class Inner {
static int x = 10; // ❌ 编译错误
static final int Y = 10; // ✅
}
不能通过 Outer.Inner 访问
主要价值是封装,不是复用
✅ Java 私有内部类用于“只在外部类内部使用”的实现细节封装,外部完全不可见,只能通过外部类间接使用。
如果你愿意,我可以再给你:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。