有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我不知道

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

以及其他Class B具有内部Class C

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

现在的问题是如何扩展C类b/C抽象类必须扩展其他类 这是未使用的类


共 (2) 个答案

  1. # 1 楼答案

    你只需扩展它

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

    或者在不扩展外部类的情况下稍微复杂一些

    class B{abstract class C{abstract void method();}}
    public class F extends B.C{
      F(B b){
          b.super();
      }
      void method(){
          System.out.println("Hello World");
      }
      public static void main(String[] args){
          B b = new B();
          F f = new F(b);
          f.method();
      }
    }
    
  2. # 2 楼答案

    首先,让我们简单一点——这与Android没有直接关系,您根本不需要A类。以下是你想要的:

    class Outer {
        abstract class Inner {
        }
    }
    
    class Child extends Outer.Inner {
    }
    

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

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

    有两个选项可以解决这个问题:

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

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

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

    请注意,这些都是备选方案——您应该根据内部类是否真的需要成为内部类来选择您想要的方案