加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:18:25 所属栏目:Java 来源:网络整理
导读:基本上,我想要做的是强制子类调用抽象超类方法(在子类中实现),因此每次创建新子类时我都不必显式地编写它. 我在超类的构造函数中写了一次,因为我希望它强制它用于每个实现. public abstract class SupahClass { public SupahClass() { doStuff(); // It IS e
基本上,我想要做的是强制子类调用抽象超类方法(在子类中实现),因此每次创建新子类时我都不必显式地编写它.

我在超类的构造函数中写了一次,因为我希望它强制它用于每个实现.

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类,所以它不能实例化,它必须将任务委托给它的子类,所以为什么它们不能调用抽象但现在实施方法?

编辑
请参阅子类属性myTextBox和init()实现

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

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

解决方法

您可以通过将声明更改为:
private TextBox myTextBox;

赋值为null没有任何用处.如果没有超类,它将什么也不做,因为无论如何字段都被初始化为null.由于有一个超类,它起到了脚的枪声.所以,摆脱它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读