Java中 为何说抽象类是代码重构的结果?

来源:百度知道 编辑:UC知道 时间:2024/04/28 22:38:20
如题 请帮忙讲解一下
不太理解你这句话的意思:“增加了新的应用的时候,可以只添加代码而不用修改原来的代码
”,使用接口,也要在实现类中多写一个方法,但是如果不用接口 不也是同样在类中多写一个方法吗?你说“实现类是死的,一有新的应用这些写死的地方肯定是需要改变的”,但是即使使用接口,你用到的接口方法如果需要修改,你不还是要在实现类中去修改那些方法吗?

这涉及到设计模式以及代码的扩展和维护

一般代码为了维护方便,要遵守以下一些原则,只列出几个:
1、针对接口(泛指,即interface和abstract class)编程而不是针对实现编程,如:
ArrayList<String> list = new ArrayList<String>();
上面这种写法就是针对实现编程,是极力不推荐的,应该使用下面这种方式:
List<String> list = new ArrayList<String>();
2、代码应该对扩展开放,对修改关闭,即尽量设计良好的代码结构,增加了新的应用的时候,可以只添加代码而不用修改原来的代码

所以,应该多使用接口(interface或abstract class)而不是实现类,因为实现类是死的,一有新的应用这些写死的地方肯定是需要改变的

还有许多许多编程的原则,这里只说了两条,不过足矣说明你的问题了

他们说的太抽象了
这么说吧,你写了个程序,完成后觉得不满意,然后又来修改
像把局部变量提升为类变量,一部分代码块提升为一个方法,或者把某个类变量改成局部变量,在这样过程中,你其实是在考虑怎么把程序做的优雅,简洁,高效,等你达到这步时,你可能有会想,能不能把它做成一个通用的工具类,能够使用有所用这一类问题中来的,这个想法一出,你肯定会想到把它通用部分提取出来做出一个类,然后你在使用中发现,各个子类中有相同的动作或行为,比动物的吃,各种动物的吃法肯定是各色各样的,于是你会想能不能不用一个通用办法来表示某些通用但其具体动作行为去又差异的,是这些差异能够延迟到子类去实现,这样你就会想到用抽象方法
我觉得,类,抽象类,接口,都是我们在追求高效,优雅,简洁过程中,不断改进,不断思考,不断深化对事物的理解总结出来的,也可以说是从实践中提取出来的具有科学性的常识和道理

自己多体会下设计模式,如果你做一个比较大的项目,就会明白,没有好的设计模式,到最后改代码的量是很巨大的

一楼说得好 搞了这么久 才知道使用接口的优势。。很有道理
我就是喜欢用ArrayList