很好玩的问题,既然java中接口都这么出色了,为什么还是会在一定程度上用抽象类呢?大家讨论下吧!

解决方案 »

  1.   

    因为有抽象类有接口完成不了的功能。抽象类可以提供一些默认的实现抽象类还有一个功能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不需要提供所有的方法声明,这个方法在很多的类库设计中都用到了
      

  2.   

    比如框架开发人员可以通过抽象类把没有争意的问题解决,把会产生分歧的方法留给框架应用者去实现,这样就减少了框架应用者的代码量,比如Spring,有很多抽象类就实现了InitializingBean接口的afterPropertiesSet方法(主要用于初始化,在对象被应用前),但是考虑到可能子类也会执行一些初始化工作,所以又定义了另一个方法如initMessage()方法,在afterPropertiesSet方法最后调用他,如果子类覆盖了initMessage()方法,那么就会被调用了。这只是应用之一
    例:
    public abstract class AbstractBean { public void afterPropertiesSet() throws Exception {
    //.....
    initMessage();
    }
    public abstract void initMessage();//初始化方法}