如何在Java中不重写子类中的方法?

如何在Java中不重写子类中的方法?,java,inheritance,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 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();
        }
    }
    ...
}
公共抽象类预处理适配器扩展BaseAdapter{
私人最终名单;
...
公共无效附加项(列表){
mList.addAll(列表);
notifyDataSetChanged();
}
公共空白清除(布尔isRepaint){
mList.clear();
如果(isRepaint){
notifyDataSetChanged();
}
}
...
}
在派生类中,我可以重写这些方法,但不需要,因为它们是相同的

  • 请你告诉我,这样写够了吗

    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();
            //        }
        }
        ...
    }
    
    公共类SomeListAdapter扩展了PreforeAdapter{
    私人最终名单;
    ...
    公共无效附加项(列表){
    超级附加项(列表);
    //mList.addAll(列表);
    //notifyDataSetChanged();
    }
    公共空白清除(布尔isRepaint){
    超级清晰(isRepaint);
    //mList.clear();
    //如果(isRepaint){
    //notifyDataSetChanged();
    //        }
    }
    ...
    }
    
  • 或者我应该取消注释这些行并在超类中删除它们

  • 我应该将超类作为抽象类吗

  • 我应该在超类中使用字段吗


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

    e、 g

    使用此代码,您可以执行以下操作:

       PitBull dogObject = new PitBull();
       dogObject.bark();
    

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

    e、 g

    使用此代码,您可以执行以下操作:

       PitBull dogObject = new PitBull();
       dogObject.bark();
    
  • 默认情况下,这些方法是继承的,也就是说,它们可以使用,因此您不必重写它们
  • 如果您不想创建这个类的实例,或者在没有实现和由子类实现的职责的情况下留下一些行为,那么超类应该是抽象的
  • 您可以在超类中使用字段,这没有问题。在任何情况下,都要注意可见性(私人、受保护、公共)
  • 默认情况下,这些方法是继承的,也就是说,它们可以使用,因此您不必重写它们
  • 如果您不想创建这个类的实例,或者在没有实现和由子类实现的职责的情况下留下一些行为,那么超类应该是抽象的
  • 您可以在超类中使用字段,这没有问题。在任何情况下,都要注意可见性(私人、受保护、公共)

  • 如果不希望重写这些方法,则不需要声明它们。子类将拥有超类的方法。将suoerclass方法设置为final。最后的方法不能被重写。@Gendarme,Jeet,谢谢,我会尝试。另外,我猜在子类中再次声明
    mList
    可能会混淆事情。请考虑是否需要<代码> MListmList可能会混淆事情。请考虑是否需要代码> McList S.侧注:您想了解开/闭原理: