Java:静态vs内部类静态和非静态嵌套类有什么区别?
3 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
让我们看看这些问题的智慧来源:Joshua Bloch的Effective Java:
从技术上讲,没有静态的内部类。根据Effective Java,正确的术语是静态嵌套类。非静态嵌套类确实是一个内部类,以及匿名类和本地类。
现在引用:
非静态嵌套类的每个实例都隐式地与其包含类的封闭实例相关联......可以在封闭实例上调用方法。
静态嵌套类无权访问封闭实例。它也占用更少的空间。
繁星淼淼
TA贡献1775条经验 获得超11个赞
静态内部类和非静态内部类之间存在两个差异。
在声明成员字段和方法的情况下,非静态内部类不能具有静态字段和方法。但是,在静态内部类的情况下,可以有静态和非静态字段和方法。
非静态内部类的实例是使用外部类的对象的引用创建的,在其中定义了它,这意味着它具有封闭实例。但是静态内部类的实例是在没有外部类引用的情况下创建的,这意味着它没有封闭实例。
看这个例子
class A{ class B { // static int x; not allowed here } static class C { static int x; // allowed here }}class Test{ public static void main(String… str) { A a = new A(); // Non-Static Inner Class // Requires enclosing instance A.B obj1 = a.new B(); // Static Inner Class // No need for reference of object to the outer class A.C obj2 = new A.C(); }}
添加回答
举报
0/150
提交
取消