我有一个关于成员内部类的顶级类的可访问性的查询。 我刚刚读到了为什么本地或匿名内部类只能访问最终变量的原因。原因是JVM将这两个类作为完全不同的类来处理,因此,如果一个类中的变量值发生更改,它不能反映在在另一个类文件中运行时间。然后,我的问题是,内部成员类(非静态)如何能够访问顶级类成员的成员,因为JVM仍然将这两个类视为不同的类文件?如果顶级类的成员变量的值发生变化,在运行时如何反映在内部类的类文件中?内部类中顶级类成员的可访问性?
0
A
回答
5
它们是单独的类,但在“内部”类中存在对“外部”类的实例的隐式引用。它基本上作为一个变量,你可以通过隐式或通过ContainingClassname.this
的特殊语法来获得。
请注意,如果你不希望这样的隐式引用,你应该把嵌套类声明为static
:
public class Outer
{
private class Inner
{
// There's an implicit reference to an instance of Outer in here.
// For example:
// Outer outer = Outer.this;
}
private static class Nested
{
// There's no implicit reference to an instance of Outer here.
}
}
1
this
隐含最后,你不能改变它。当你写像
class Outer {
int a;
class Inner {
{ a = 1; }
}
}
一些事情,你实际上是写一样
class Outer {
int a;
class Inner {
{ Outer.this.a = 1; }
}
}
的a
是不是最终的,但Outer.this
是,那是用来参考。
相关问题
- 1. 内部类访问外部类成员
- 2. 在内部类中访问外部类的私有成员:JRuby
- 3. 无法使用外部类对象访问内部类成员
- 4. Java类成员的访问级别
- 5. 类型为内部的受保护成员的不一致可访问性
- 6. 访问类成员
- 7. 如何访问外部类成员的子类内部类继承
- 8. 的Java:内部类的访问级别
- 9. 在内部类安全实践中访问外部类变量/成员?
- 10. 导出类(DLL)中静态数据成员的可访问性?
- 11. 访问共享成员,部分类
- 12. 内部类的实例无法访问外部类的数据成员
- 13. 如何从内部类构造函数访问外部类的静态成员?
- 14. 访问类内部的私有成员指针的假设
- 15. 如何从WPF的内部类访问父母的成员?
- 16. 内部类成员/属性可见性(C#)
- 17. 在ES6类语句内部访问回调函数中的类成员
- 18. 访问类私有成员内的结构成员?
- 19. 使用类的成员函数访问结构成员内部时出错
- 20. C#类成员访问
- 21. 访问类型成员
- 22. 访问外部类的内部类
- 23. 外部类内部类 - 实例化内部类作为外部类的成员
- 24. 访问类层级属性
- 25. 如何从类成员函数内部访问静态函数?
- 26. 访问私有类中的成员
- 27. 如何从外部类的内部类访问属性?
- 28. 从外部访问内部成员
- 29. C++派生类访问基类成员
- 30. 使用类成员函数访问类内的私有结构
但是,对于本地类(方法级),为什么他们不能拥有顶级类的这种隐式引用来直接使用它的成员而不是将它们声明为最终的? – 2011-06-05 17:19:00
@Sumit:因为内部类没有变量本身的副本 - 只是对外部类实例的引用。它只是* local *变量,最后在匿名内部类中创建副本。你可以从封闭的实例中访问* instance *变量而不需要它们是最终的,即使在匿名内部类中也是如此。 – 2011-06-05 17:21:04
ohh ...是...现在得到它...... – 2011-06-05 17:38:06