如何使用外部类名调用非静态内部类

时间:2017-10-28 10:24:49

标签: java

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调用静态类B,尽管类A不是静态的

4 个答案:

答案 0 :(得分:3)

这与要静态的类无关,它与方法中的static关键字相关。

看看How static keyword exactly works in Java?还阅读了这篇文章Java – Static Class, Block, Methods and Variables

答案 1 :(得分:1)

另外一个方面如何解释这个:

class本身不是staticnon static它只是class

无论如何,您只能将static个关键字用于class个成员。如果您尝试将InnerTest声明为static,则会出现类似于此的错误(因此假设它不是某个其他类的静态嵌套类)

  

InnerTest类的非法修饰符;只有公共的,抽象的和   允许进入决赛

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

如果需要访问non static成员,则不能static,而且调用方式可能就像new InnerTest().new B()

答案 2 :(得分:0)

static关键字用于修改类的成员。使用static修改成员时,可以使用附带的类直接访问该成员。 name,而不是像使用非静态成员一样使用封闭类的实例。

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

class Outer {
    static class Inner {}
}

因此,可以像这样访问Inner

Outer.Inner

Outer不需要/ static无法修改,因为它不是班级的成员。它是一个存在于全球范围内的类。要访问它,只需写下其名称 - Outer即可。它是非静态的没有意义,因为它没有封闭的类。如果它是非静态的,你应该如何访问它?

答案 3 :(得分:0)

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

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

因为B类被声明为静态,所以它不会保留对A类实例的引用。