为什么我不能在main中实例化一个内部类?

时间:2013-05-08 04:27:44

标签: java

为什么编译器在这里抱怨?它不允许我在main中创建一个Wrapper对象。 MyList是一个单独的类。我该如何创建它?

public class BinaryTree {
    Node root;

    class Wrapper {
        MyList.Node node;
    }

    class Node {
        Integer value;
        Node left;
        Node right;

        Node(int value) {
            this.value = value;
        }
    }

    public static void main() {
        MyList list = new MyList();
        Wrapper w = new Wrapper();
        w.node = list.getHead();
    }
}

3 个答案:

答案 0 :(得分:13)

Wrapper是一个内部(非静态嵌套)类。为了创建一个对象,它应该是静态的或通过外部类访问,例如new BinaryTree().new Wrapper()

答案 1 :(得分:4)

Wrapper需要声明为static:

static class Wrapper

您是否考虑过将所有这些类移到单独的文件中?

(假设您的main方法位于BinaryTree。如果没有,您还需要应用Preet Sangha建议的方法。)

答案 2 :(得分:1)

WrapperBinaryTree的非静态内部类。有两种方法可以创建Wrapper的对象:

  1. Wrapper设为静态,并将Wrapper的对象直接创建为Wrapper wrapper = new Wrapper();

  2. 实例化外部类的对象,即BinaryTree,并使用BinaryTree的对象,创建Wrapper对象,如下所示:

  3.  BinaryTree binary = new BinaryTree();
     Wrapper wrapper = binary.new Wrapper();