如何在java中扩展抽象内部类

时间:2015-07-02 05:42:43

标签: java inner-classes

我很困惑,如果

Abstract Class A{method();method2();}

其他Class B内心Class C

Class B{Abstract Class C{method(){//body}}}

现在问题是如何扩展C类B / C抽象类必须扩展其他 这是Unused类。

2 个答案:

答案 0 :(得分:6)

首先,让它变得更简单 - 这与Android无直接关系,您根本不需要A课程。这就是你想要的:

class Outer {
    abstract class Inner {
    }
}

class Child extends Outer.Inner {
}

这不会编译,因为当您创建Child的实例时,您需要向Outer构造函数提供Inner的实例:

Test.java:6: error: an enclosing instance that contains Outer.Inner is required
class Child extends Outer.Inner {
^
1 error

有两种方法可以解决这个问题:

  • 如果您不需要从Outer引用Inner的隐式实例,则可以使Inner成为静态嵌套类:

    static abstract class Inner {
    }
    
  • 您可以更改Child以接受对Outer实例的引用,并使用 来调用Inner构造函数,该构造函数使用有点令人惊讶的语法,但有效:

    Child(Outer outer) {
        // Calls Inner constructor, providing
        // outer as the containing instance
        outer.super();
    }
    

请注意,这些是替代方案 - 您应该根据内部类是否真正需要作为内部类来选择您想要的那个。

答案 1 :(得分:1)

你只是扩展它

pm2 start app.js -x --prod

或者稍微复杂一点而不扩展外部类

class B{abstract class C{abstract void method();}}
class D extends B{
    class E extends C{
        void method(){
            System.out.println("Hello World");
        }
    }
}