如何定义外部类之外的内部类

时间:2014-11-17 08:18:31

标签: java inner-classes extend

我有一个类似于“Defining inner class outside java file”的问题。 但那个提问者,只是想通过让课程全部放在一个包中来做一些可能的事情。

与他类似,我想将一些类定义为外部对象的内部对象;但我想访问该对象的动态字段。为了避免拥挤的类,我想在其他一些“innerClasses.java”中定义它们。使用“extend”只能让我能够使用它的静态字段。但是,我想像内部对象一样访问动态字段。

作为一个简短的例子(但实际上一个很好的例子会有问题)我想在类“OuterClass.java”中使用这个类

public class OuterClass{
    double nonStaticField
}

其他类中的每个类

public class InnerClass1OfOuterClass{
    ...
}

public class InnerClass2OfOuterClass{
    ...
}

public class InnerClass3OfOuterClass{
    ...
}

public class InnerClass4OfOuterClass{
    ...
}

....

1 个答案:

答案 0 :(得分:1)

“自然”方式将是另一种方式:让内部类扩展一些包含主要代码的抽象类:

class Outer {
    class Inner extends InnerBase<Outer> {
        ... little code
    }
}

class InnerBase<T> {
    protected int eger;
    ... most code
}

然后也委托给另一个班级。

现在,如果您仍想扩展内部:

class InnerBase<T> {
    protected int eger;
    ... most code
}

class Sinner extends Outer.Inner {
}

Outer outer = new Outer();
Inner sinner = outer.new Sinner();

出于实际目的,您可以在外部

中创建
protected Inner createInner() { return new Inner(); }

并扩展Outer,覆盖工厂方法createInner。

这段代码设计可能有点间接,因此我的“自然”在开头。