在Java中,使用抽象类来实现接口,并非毫无做用。相反,有时间有很大的做用。 程序员
当你只想实现接口中的个别方法(不是全部方法)时,你能够先写一个抽象类来实现该接口,并实现除了你想要的方法以外的全部方法(方法体为空)。接着再用你的类继承这个抽象类,这个类中就只用实现你须要的方法了,这样就能够达到你的须要了。可是,若是你直接实现接口的话,你就须要实现接口的全部方法。 spa
经过下面例子,能够很好的理解: 设计
例:有一个接口ListModel,有四个方法,addListDataListener(ListDataListener l),getElementAt(int index),getSize(),removeListDataListener(ListDataListener l)四个方法,程序员在设计页面时只关注对其返回指定索引处的值和返回列表的长度(getElementAt(int index)和getSize()),因此他只须要实现getElementAt(int index)和getSize()这两个方法,而其他两个不用实现。则设计以下: 继承
//接口 索引
interface ListModel{ 接口
public void addListDataListener(ListDataListener l); rem
public Object getElementAt(int index); get
public int getSize(); class
public void removeListDataListener(ListDataListener l) 扩展
}
/**
*抽象类,不实现须要的方法。而实现的不须要的方法的方法体设为空,
*/
abstract class AbstractListModel implements ListModel{
public void addListDataListener(ListDataListener l) {
listenerList.add(ListDataListener.class, l);
}
public void removeListDataListener(ListDataListener l) {
listenerList.remove(ListDataListener.class, l);
}
}
/**
* 具体实现类,实现特定的方法,该类中只有须要的方法
*/
public class MyListModel extends AbstractListModel {
public Object getElementAt(int index){
//XXXXXXXXXXX
}
public int getSize() {
//XXXXXXXXXXXXXXX
}
}
总结:抽象类有个好处就是,它能够有方法的具体实现,也能够不写方法的具体实现,而接口里是没有具体实现的。
一个类若是实现一个接口,那它必然要实现接口里的全部方法,而若是是扩展一个抽象类的话,子类里能够什么都不写或只写部分。