簡體   English   中英

如何不重寫Java子類中的方法?

[英]How not to override a method in a subclass in Java?

我有一類將需要創建具有類似功能的派生類。

public abstract class PreloaderAdapter<T> extends BaseAdapter {
    private final List<T> mList;

    ...
    public void addItems(List<T> list) {
        mList.addAll(list);
        notifyDataSetChanged();
    }

    public void clear(boolean isRepaint) {
        mList.clear();
        if (isRepaint) {
            notifyDataSetChanged();
        }
    }
    ...
}

在派生類中,我可以重寫這些方法,但不希望這樣做,因為它們是相同的。

  1. 請問我,寫這樣的文字夠嗎?

     public class SomeListAdapter extends PreloaderAdapter<MyClass> { private final List<MyClass> mList; ... public void addItems(List<MyClass> list) { super.addItems(list); // mList.addAll(list); // notifyDataSetChanged(); } public void clear(boolean isRepaint) { super.clear(isRepaint); // mList.clear(); // if (isRepaint) { // notifyDataSetChanged(); // } } ... } 

還是應該取消注釋這些行並在超類中將其刪除?

  1. 我應該將超類抽象嗎?

  2. 我應該在超類內部使用字段嗎?

在Java中,如果在一個超類中聲明並實現了一個方法,則如果擴展此超類,則子類將在默認情況下實現該方法。

例如

public class Dog {
    //Atributes
    //Methods
    public void bark() {...}//Do an action

}

public class PitBull extends Dog {
    //Atributes
    //Methods
    public void action2() {...}//Do another action
}

使用此代碼,您可以執行以下操作:

   PitBull dogObject = new PitBull();
   dogObject.bark();
  1. 默認情況下,這些方法是繼承的,即可以使用它們,因此您不必重寫它們。
  2. 如果您有興趣不讓其創建此類的實例或不執行某些行為而又沒有實現以及由子類實現的義務,則超類應該是抽象的。
  3. 您可以使用超類中的字段,這沒有問題。 無論如何,請注意可見性(私有,受保護的,公共的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM