【问题标题】:Accessing abstract nested class in java在java中访问抽象嵌套类
【发布时间】:2012-12-28 05:25:59
【问题描述】:

假设我有一个班级说 A 是一个普通班级。

现在 A 嵌套了一个 B 类,而 B 又嵌套了 C。

B 类是抽象类,而 A、C 不是。

现在,不能为 B 创建对象,因为它是一个抽象类。

但除非我为 B 类创建对象,否则我将无法为 C 类创建对象。 因为,

outerclass out=new outerclass();
outerclass.innerlcass in=outerclass.new innerclass();

由于 B 没有 object ,因此在这种情况下,outerclass 对象“out”不可用。

那么如何为 C 创建一个对象呢?

【问题讨论】:

  • 将 C 设为静态类,然后您将能够以 B.new C() 的形式访问它
  • 它真的是一个用例还是一个虚构的例子?

标签: java class nested abstract


【解决方案1】:

一种方式:

public class A {
    abstract class B {
        abstract String get();
        class C {
            void run() {
                System.out.println(get());
            }
        }
    }

    public static void main(String[] args) {
        new A().new B(){ String get() { return "hi"; } }.new C().run();
    }
}

或者交替使用与上面相同的 A、B 和 C:

class ConcreteB extends B {
    String get() {
        return "I'm not anonymous!";
    }
}

public static void main(String[] args) {
    new A().new ConcreteB().new C().run();
}

【讨论】:

  • 有了这个实现,需要为B类中的所有“抽象”方法提供实现
  • @rahulroc:当然,这就是我在两个示例中都这样做的原因。
  • 因此,我认为我在问题评论中提供的解决方案可能是一个更好的解决方案,只要他可以更改类定义。
  • @rahulroc:也许,但这也假设 C 不需要封闭的 B 实例,就像在我的示例中那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
相关资源
最近更新 更多