抽象类的使用一般是专门用于被其他类继承的,其中的抽象方法则肯定需要子类进行详细的实施。抽象类虽然在一定程度上完成了多态性,但是其本质是一个继承体系。即抽象类本身比较稳定,一旦使用了继承体系。
使用抽象类允许提供一些方法的默认实现,除非这个方法被设定为final,否则不能保证继承的时候不能被覆盖那么子类型就有可能通过这个方法来修改抽象类型的固有方法。同时,子类型也可能因此而依赖抽象类型的方法,这使得抽象的修改成为一个敏感的话题。类只能实现一次继承,即java中不允许多继承。
抽象类的使用一般仅仅限于软件包内部,如果确实认为某一个类族共享了某一部分方法,只有少数方法有区别,那么可以使用抽象类技术。同时还要注意为了安全起见,所有的方法设置成final,而且所有的子类方法(继承该类的子类),这样可以避免覆盖那些需要共享的方法,也可以避免覆盖那些需要共享的方法,也可以避免继续扩大继承的层次。
Java方法中实施多态性最好的方法是使用接口。接口相当于C++中的虚基类(也叫做纯基类),只有方法的定义,没有方法的实现。接口的唯一缺点是所有的实现接口的类必须把定义的方法统统实现一遍,某些情况下会影响代码的复用,但是除此之外没有任何java的接口技术几乎没有任何缺点。