2017-10-28 84 views
0
public class InnerTest { 

    public static void main(String arg[]) { 
     A.B.print(); 
    } 
} 

class A { 
    static class B { 
     static void print() { 
      System.out.println("Hello"); 
     } 
    } 
} 

我如何使用类名,虽然A类也不是一成不变的如何非静态内部类可以使用外部类的名字

+0

为什么你认为'class A'应该是'static'? –

回答

0

static关键字用于修改一个类的成员。当成员使用static进行修改时,可以使用封闭类的名称直接访问它,而不是像使用非静态成员那样使用封闭类的实例。

内部类下面Inner是类Outer的成员:

class Outer { 
    static class Inner {} 
} 

因此,Inner可以这样获得:

Outer.Inner 

Outer不需要/不能被修改由static,因为它不是一个类的成员。它是全球范围内存在的一类。要访问它,你只需要输入它的名字 - Outer。它没有意义,因为它没有封闭类,所以它是非静态的。如果它是非静态的,你应该如何访问它?

0

要使用正确的术语,B类不是内部类;它是一个静态嵌套类。有关各种嵌套类的定义,请参见https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

重要的关键字是在B类定义前面的static关键字。A类是否是静态的并不重要。事实上,把static放在A类定义的前面是没有意义的。

由于B类被声明为静态的,它没有一个参考保持到A级的实例

1

还有一个方面是如何来解释这一点:

class本身不是staticnon static它是只是一个class

无论如何,您可以使用static关键字只有class成员。如果您想尝试声明InnerTeststatic你将有一个错误可能看起来像这样的(因此,假设它不是静态的嵌套类为其他类)

该类InnerTest非法修改;只有公开,抽象& 最终被允许

static嵌套class可以作为一个问题,因为它不需要访问的InnerTest任何实例成员。换句话说,它可以访问static成员,只有那些成员。

如果需要访问non static成员,那么它不可能是static,并且调用的方式将如new InnerTest().new B()

相关问题