强制子类“实现”字段的值

时间:2017-05-04 15:41:57

标签: java android inheritance

我在Java中有一个Button基类,以及从这个类继承的几种类型的按钮子类。 Button基类看起来像这样:

public abstract class BaseButton extends AppCompatButton{

    private ButtonStatus buttonStatus = ButtonStatus.OFF;
    private Image onIcon;
    private Image offIcon;

    public void toggleButton(){

        if(this.buttonStatus == ButtonStatus.ON){
            this.buttonStatus = ButtonStatus.OFF;
            setBackgroundResource(offIcon);
        }else if(this.buttonStatus == ButtonStatus.OFF){
            this.buttonStatus = ButtonStatus.ON;
            setBackgroundResource(onIcon);
        }

    }

}

我希望每个Button子类能够调用toggleButton()方法,但每个方法都有不同的onIcon和offIcon字段。由于我在超类中使用这些字段,我需要在那里声明它们,并且它们都被实例化为null。

因此,每当我从子类调用toggleButton()方法时,都会从超类中使用null值。但是,我想在超类中实现此方法(以避免代码重复),但仍使用子类字段。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

将两个图标作为参数传递给超类:

public abstract class BaseButton extends AppCompatButton{

    private ButtonStatus buttonStatus = ButtonStatus.OFF;
    private Image onIcon;
    private Image offIcon;

    public BaseButton (Image onIcon, Image offIcon){
      this.onIcon = onIcon;
      this.offIcon = offIcon;
    }
    public void toggleButton(){
 // ...

并在子类中

public class SubButton extends BaseButton {
  public SubButton () {
      super(IconSet.SUB_BUTTON_ICON_ON,IconSet.SUB_BUTTON_ICON_OFF);
  }
  // more code