2017-05-04 88 views
0

我有一個Java的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); 
     } 

    } 

} 

我希望每個按鈕子類可以調用toggleButton()方法,但他們每個人都有不同的歐康和offIcon領域。由於我在超類中使用這些字段,所以我需要讓它們在那裏聲明,並且它們都被實例化爲null。

因此,無論何時我從子類中調用toggleButton()方法,都將使用超類中的值null。但是,我想在超類中實現此方法(以避免代碼重複),但仍使用子類字段。

我該如何做到這一點?

+1

添加'getOnIcon()'和'getOffIcon()'抽象方法 – 2017-05-04 15:49:39

+0

(可能是一個更好重複,感覺自由..) – 2017-05-04 15:55:19

回答

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 
+0

請注意,基類不需要在您的答案是抽象的。 – 2017-05-04 15:50:28

+0

@RC。我只是採用了這個問題的代碼.... –

+0

是的,它只是一個「附註」 – 2017-05-04 15:53:44