繁体   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