面向空实现类继承

正在作一个项目,根据以往看一些java和框架源码的印象,模仿着写了一些基础类的继承结构,用着挺顺,今早上班步行的空余时间,回想了下,发现这种结构还算比较不错,想不通为何大学上课好像老师没提过....java

 

之前上课常说面向接口编程,讲得很抽象很肤浅,很长一段时间都觉得一切都应该向借口看齐,而忽略了抽象类。逻辑上来讲,实现类跟接口是has a的关系,跟抽象类是is a的关系,实际上二者的功能也差很少,很容易在写基础类的时候,不知道该选择接口仍是抽象类,到如今我仍是凭直觉去瞎搞的。以前看度娘说,使用接口编程能使程序代码更灵活,更强壮,但缺点是接口的扩展性受到抑制,缘由是这样的:编程

 

假设接口定义以下:框架

1 public interface Interface {
2     void toDo();
3     void toEat();
4     void toSleep();
5 }

继承关系以下:性能

 

此时出现一个问题,若是由于一些缘由,接口Interface的方法须要增长一个toShit(),那么后续实现的全部类Class/ClassA/ClassB/ClassC/ClassD/ClassE/ClassF/……所有都须要进行修改,由于必需实现接口的全部方法。spa

 

若是改变一下,在接口后面直接接一个抽象空实现类(或者不抽象的),提供接口全部方法的一个空实现,全部子类均继承实现此类:设计

 

那么当接口须要增长方法时,仅须要更改BasicClass,增长一个空实现,后续子类彻底不需变更代码。这样子接口的扩展性能获得一点改善,对初期没把握将接口设计完善的时段应该挺有用。code

相关文章
相关标签/搜索