如何不在Java中覆盖子类中的方法?

时间:2016-07-15 09:39:08

标签: java inheritance

我有一个类来创建具有类似功能的派生类。

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();
            //        }
        }
        ...
    }
    
  2. 或者我应该取消注释这些行并在超类中删除它们吗?

    1. 我应该将超类设为抽象吗?

    2. 我应该在超类中使用字段吗?

2 个答案:

答案 0 :(得分:1)

在Java中,如果在超类中声明并实现了一个方法,那么如果扩展这个超类,子类将默认实现该方法。

e.g

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 :(得分:1)

  1. 默认情况下,方法是继承的,也就是说,它们可供使用,因此您不必覆盖它们。
  2. 如果您有兴趣不提供创建此类实例的可能性或者在没有实现的情况下留下某些行为以及由子类实现的义务,则超类应该是抽象的。
  3. 您可以使用超类中的字段,没有问题。无论如何,要注意可见性(私人,受保护,公开)。