【问题标题】:Refering to subclass from abstract class从抽象类引用子类
【发布时间】:2017-01-10 12:35:26
【问题描述】:

我的抽象类有一个问题,不知道哪个子类调用了它的构造函数。

abstract class A {

    Field field;

    public A() {
        this.field = Manager.add(Here i would like to add the type of subclass);
    }
}

我可以在构造函数链中携带类类型作为参数,但我想知道是否有不同的方法。
也许我可以使用 StackTrace 来了解子类并获取它们的类型,但我认为不应该这样使用。

非常感谢您的回答:)

【问题讨论】:

  • 通常抽象类不需要知道这一点。类型特定的逻辑应该发生在子类中。请注意,您可以在抽象类中定义一个抽象方法,从构造函数中调用它,但在子类中实现它。所以你可以以某种方式影响超类构造函数的行为。
  • @JFMeier,不鼓励从构造函数调用抽象方法,因为该方法可以访问未初始化的属性。
  • @Codebender 我知道这是有风险的(我自己也遇到过你提到的问题),但在某些情况下它可能有用。

标签: java polymorphism abstract-class


【解决方案1】:

this.getClass() 将为您提供已实例化的类。

【讨论】:

  • 在调用超类的构造函数之前可以调用this.getClass()吗?
  • 否,因为子类是在其基类/超类之后实例化的。
  • @SchokokuchenBäcker 在调用超类的构造函数之前你不能做任何事情super(...) 调用必须首先出现在构造函数中。
  • @SchokokuchenBäcker 是的。有一个技巧可以做到这一点。但您最好单独提出问题。
  • myMethodThatwillBeInvokedBeforeSuperConstructor() 必须是静态的,所以你不能在那里调用this.getClass()。你会得到一个“在调用超类型构造函数之前不能引用这个”错误(至少在 Java 8 中)。
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多