内部类有什么作用?与静态嵌套类有什么不同?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
嵌套类型可以把只服务于某个外部类型的实现放在附近,并控制其可见性。非静态成员内部类带有外围实例语境,能访问该实例的成员;静态嵌套类没有隐含外围实例。局部类、匿名类则适合较局部的实现,但并不意味着它们都具有完全相同的规则。
讲清原理
若辅助对象确实需要某个外部对象的状态,成员内部类可以表达这种联系;若只是组织名称和实现,静态嵌套类通常能减少无意保留外围对象的风险。
局部或匿名类捕获局部变量时,变量需为 final 或事实上 final;这不会让被引用对象自动不可变。也不要沿用旧答案“内部类绝不能声明静态成员”:Java 21 已允许内部类声明静态成员及静态初始化器。
例子与易错点
class Outer {
int value = 7;
class Inner { int read() { return value; } }
static class Nested { int read() { return 9; } }
}
Outer outer = new Outer();
System.out.println(outer.new Inner().read()); // 7
System.out.println(new Outer.Nested().read()); // 9
图中表达外围实例关系,不承诺每个编译器都生成相同的隐藏字段。lambda 也不是“匿名内部类的另一种拼写”,其 this 等语义存在区别。
相关题:第 20 题、第 34 题、第 51 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。