简体   繁体   English

如何实例化抽象类的内部类-Java

[英]How to instantiate inner class of abstract class - java

Consider 考虑

public abstract class Foo{

    ///some code

    class Foo1 extends Foo
    {
        //// some code
    }

    class Foo2 extends Foo
    {
        ///// some code 
    }
}

How can I create an object of the inner classes? 如何创建内部类的对象?

To instantiate nested non-static (inner) class, you need an instance of enclosing class. 要实例化嵌套的非静态(内部)类,您需要一个封闭类的实例。

But your enclosing class is abstract, so you can't instantiate it. 但是您的封闭类是抽象的,因此无法实例化它。 What should you do? 你该怎么办?

If you really need non-static nested class, then the only option is to extend the abstract class and instantiate the inner class using instance of extending class. 如果确实需要非静态嵌套类,则唯一的选择是扩展抽象类,并使用扩展类的实例实例化内部类。

public abstract class Foo {
    public class Foo1 extends Foo {
    }

    public static class FooImpl extends Foo {
    }

    public static void main(String[] args) {
        Foo foo = new FooImpl();
        Foo1 foo1 = foo.new Foo1();
    }
}

You need another top level class extending Foo: 您需要另一个扩展Foo的顶级类:

class Foo3 extends Foo {
  Foo foo;

  Foo3(){
   foo= new this.Foo2();
  }
}

or declare a static inner class: 或声明一个static内部类:

public abstract class Foo{

    ///some code

    class Foo1 extends Foo
    {
        //// some code
    }

    class Foo2 extends Foo
    {
        ///// some code 
    }

    static class Foo3 extends Foo {
      Foo foo;

      Foo3(){
       foo= new this.Foo2();
      }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM