因为有抽象类有接口完成不了的功能。抽象类可以提供一些默认的实现抽象类还有一个功能public interface complexinterface{ public void sss();public void aaaa();public void bbbbb();public void cccccc();public void dddddd(); } public abstract class complexaclass implements complexinterface{ public void sss(){}public void aaaa(){}public void bbbbb(){}public void cccccc(){}public void dddddd(){} } 很多时候并不需要实现complexinterface里面的所有方法所以写个抽象类提供默认的空实现,继承complexaclass不需要提供所有的方法声明,这个方法在很多的类库设计中都用到了
比如框架开发人员可以通过抽象类把没有争意的问题解决,把会产生分歧的方法留给框架应用者去实现,这样就减少了框架应用者的代码量,比如Spring,有很多抽象类就实现了InitializingBean接口的afterPropertiesSet方法(主要用于初始化,在对象被应用前),但是考虑到可能子类也会执行一些初始化工作,所以又定义了另一个方法如initMessage()方法,在afterPropertiesSet方法最后调用他,如果子类覆盖了initMessage()方法,那么就会被调用了。这只是应用之一 例: public abstract class AbstractBean { public void afterPropertiesSet() throws Exception { //..... initMessage(); } public abstract void initMessage();//初始化方法}
public void sss();public void aaaa();public void bbbbb();public void cccccc();public void dddddd();
}
public abstract class complexaclass implements complexinterface{
public void sss(){}public void aaaa(){}public void bbbbb(){}public void cccccc(){}public void dddddd(){}
}
很多时候并不需要实现complexinterface里面的所有方法所以写个抽象类提供默认的空实现,继承complexaclass不需要提供所有的方法声明,这个方法在很多的类库设计中都用到了
例:
public abstract class AbstractBean { public void afterPropertiesSet() throws Exception {
//.....
initMessage();
}
public abstract void initMessage();//初始化方法}