如何强制子类调用抽象的实现方法

dominicbri7:

基本上,我要执行的是强制子类调用抽象超类方法(在子类中实现),因此不必在每次创建新的子类时都明确地编写它。

我曾经在超类的构造函数中编写过一次,因为我希望它在每个实现中都强制使用它。

public abstract class SupahClass {
    public SupahClass() {
        doStuff(); // It IS executed when the subclass constructor is called
        init(); // NOT executed, even though it's implemented
    }

    private void doStuff() { ... }        

    protected abstract void init();
}

public class SomeSubClass extends SupahClass {

    // The problem lies HERE: this is executed AFTER init() ... so it gets NULL again
    private TextBox myTextBox = null;

    public SomeSubClass() {
        super(); // invokes the super constructor, so init() should be called
        // I could call init(); here EACH time i create a new subclass... but no :)
    }

    @Override
    public void init() {
        this.myTextBox = new TextBox(); // Executed BEFORE its declared as null above
    }
}

当然,超类由于其抽象(未定义)方法而无法真正调用它,但由于其ABSTRACT类使其无法实例化,因此必须将任务委托给其子类,所以为什么不能调用该抽象,但是现在实施的方法?

编辑查看子类属性myTextBoxinit()实现

您认为我应该采取哪种方法?删除= null属性声明(duhhh)中的

或删除init()超类中的,并在子类构造函数中显式调用它(这是我想要避免的,因为我必须100%的时间编写它。)

汤姆·安德森:

您可以通过将声明更改为以下内容来解决此问题:

private TextBox myTextBox;

将null赋值没有任何用处。如果没有超类,它将什么也不做,因为无论如何字段都会初始化为null。由于存在超类,因此它就像脚上的枪声。因此,摆脱它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用抽象的情况下强制实现子类中的方法?

如何创建强制子类调用构造函数中特定方法的抽象适配器类

如何强制子类实现静态方法

如何强制我的类的任何子类始终调用它们所覆盖的父类的实现方法?

在Java的子类中实现抽象方法

定义抽象方法,但需要子类实现

如何使用__init_subclass__而不是ABCMeta来实现子类以实现父类的抽象方法?

在Python中,如何将抽象方法强制为子类上的静态方法?

强制子类实现私有方法

c#,子类中的强制方法实现

如何强制后代类实现抽象功能?

从子类对象调用抽象方法

强制子类在重写时调用父方法

如何在Java中强制调用超类实现Object.toString()而不是子类重写对对象的实现

如何确保某些方法从子类(Java)中的方法从抽象超类中调用

使用子对象数组时,如何调用抽象类的子类方法?

如何在调用自己的植入之前强制继承类的方法实现调用基本方法?

无法编译实现基类抽象方法的子类

子类可以在Java中保留未实现的抽象方法吗?

Java子类无法实现父类的抽象方法

如何在不强制转换的情况下通过基类调用子类方法

如何调用子类方法(Java)

从Stream调用的close()方法如何指向AbstractPipeline抽象类中close()方法的实现?

从Stream调用的close()方法如何指向AbstractPipeline抽象类中close()方法的实现?

如何强制实现抽象类的类声明其变量?

从子类调用方法时出现“抽象错误”

从指针基抽象类调用非虚拟子类方法

强制子类实现协议快速

强制子类中的toString()实现