个人觉得楼主对于抽象类的理解是比较准确的。抽象类其实并不是一种“抽象”(有点绕嘴),而更类似一种“公共实现”。因此在面向对象设计中,抽象类的重要性比不上接口。个人觉得抽象类更类似于一种实现细节。
而接口这是真正的“抽象”。将一组相关的属性/操作提取出来供调用者使用。从而使得调用者和实现者解耦。
实际工作中经常出现的情况是,调用者C(已存在),需要执行功能A;实现者O,支持功能A,但是还做了一大堆其他事情。这时候吧功能A提取出来,做个接口,然后让C通过接口A调用O,这样需要换个P来实现A功能的时候就可以直接换掉O,而不用再修改C了。
很简单,价值观不同。网上你看到大多数人其实都是码畜,这些人仅限于完成任务,编写粗制滥造的程序,这种价值观决定了他们的思维,用什么东西能做什么不能做什么。
回应这些低端代码工最简单的办法就是告诉他们,从一种编程语言中拿走接口、抽象类等语法特性,这种语言所能做的事情一件也不会少——只要它仍然是图灵等价的,那么它就能完成一切编程任务。
还有一些是学生党,这些人毫无编程经验,专门捣鼓一些似是而非的术语和所谓的“心得”,这些“心得”好一些的是他们自己在几次调试中观察了一些现象后胡思乱想出来的,糟糕一点的是以讹传讹或者胡编乱造。总之他们的出发点和落脚点都和编程无关。
你知道你被这些人打败的原因是在他们的价值观和世界里的法则根本和我们不同。比如说他们会从没有接口如何如何去讨论接口的用处。或者从JRE实现接口和实现继承类的手段有什么不同来比较两者。你和他们讨论你就输了。
好比你拥有了汽车,你去和一个买不起汽车的穷人讨论汽车有什么用。他会告诉你汽车能办到的事情他走路都能办到,或者汽车多么费油还会出交通事故一样。
去看设计模式把 推荐《Head First设计模式》