Java:静态与内部类
这个问题在这里已经有了答案:
根据定义,内部类不能是静态的,所以我将重新将你的问题重新定义为“静态和非静态嵌套类之间有什么区别?”
非静态嵌套类可以完全访问它所嵌套的类的成员。 静态嵌套类没有对嵌套实例的引用,所以静态嵌套类不能调用非静态方法,也不能访问嵌套类的实例的非静态字段。
让我们来看看这些问题的智慧之源: Joshua Bloch的Effective Java :
从技术上讲,没有静态的内部类。 根据Effective Java ,正确的术语是一个静态嵌套类 。 非静态嵌套类实际上是一个内部类,以及匿名类和本地类。
现在引用:
非静态[嵌套]类的每个实例都与其包含类的封闭实例隐式关联...可以调用封闭实例上的方法。
静态嵌套类不能访问封闭实例。 它也使用更少的空间。
静态内部类和非静态内部类有两个区别。
在声明成员字段和方法的情况下,非静态内部类不能有静态字段和方法。 但是,在静态内部类的情况下,可以有静态和非静态的字段和方法。
非静态内部类的实例是通过外部对象的引用创建的,它已经定义了它,这意味着它包含了实例。 但是静态内部类的实例创建时没有Outer类的引用,这意味着它没有包含实例。
看到这个例子
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();
}
}
链接地址: http://www.djcxy.com/p/16375.html
上一篇: Java: Static vs inner class
下一篇: Why can a static inner member class access the outer private constructor