Java中的独立(语法或单独文件)内部类?

时间:2013-10-01 13:51:06

标签: java module inner-classes

有没有办法在Java中定义独立的内部类?

注意:我不需要在C#中使用“部分”类,我需要完整的类,但需要内部。

有没有计划在未来的Javas中引入这样的语法?

package tests.java;

public class Try_InnerClassStandalone_01 {

    public static void main(String[] args) {

        Outer O1 = new Outer(12);
        Outer O2 = new Outer(13);

        Outer.Inner i1 = O1.new Inner();
        System.out.println(i1.getData());

        InnerExt i2 = O1.new InnerExt();
        System.out.println(i2.getData());

    }
}

class Outer {

    class Inner {
        int getData() {
            return data;
        }
    }

    public int data;

    public Outer(int data) {
        this.data = data;
    }
}

class InnerExt extends Outer.Inner {

}

更新

我知道静态和非静态内部类之间的区别。我想利用这些优势并避免不利之处。

优点是能够隐式引用Outer.this(更短的代码)。

缺点是必须将内部类放入外部类定义的边界(没有模块化)。

2 个答案:

答案 0 :(得分:1)

试试这个:

class Outer {
    static class Inner {
        // ...
    }
}

非静态内部类的实例具有对其封闭类的实例的隐式引用。如果你想要我怀疑你对“独立内部阶级”的意思,你应该建立内部阶级static

答案 1 :(得分:1)

你不能这样做

class InnerExt extends Outer.Inner {

}

因为Inner仅与Outer实例的上下文相关。您无法在Outer的上下文之外扩展它。就像你可以做的那样

class Outer {
    class Inner {

    }
    class InnerExt extends Inner {

    }
}

否则您需要Inner static课程。然后,您可以在其可见性范围内扩展它。