什么是面向对象
作者:互联网
1,什么是面向对象编程。
跳出具体的实现步骤,找整体。
比如我要看电视,我就去找遥控器,遥控器就是一个对象。遥控器中的按钮就是一个一个的方法。每一个方法都能实现特定的功能。
分析一下
1,看电视是我的需求。 (接口) 看电视.开机 (接口中有个方法叫开机)
2,遥控器可以实现需求。 (实现类) 遥控器.开机 (遥控器中实现了开机方法)
3,按钮就是实现需求的具体方法。 (实现方法)开机 (具体的开机方法的实现)
遥控器就是一个对象。可以满足看电视的需求 的对象。 我只要调用遥控器对象的开机方法就能看电视 ”遥控器.开机“
方法的内部我不管 因为我只需要知道你这个方法是用来开机的就够了。
2,什么是面向接口编程。
我直接用接口调用方法。
看电视.开机 实现类的内部我不管 因为我知道,你只要是我这个接口的实现类,那么就一定有开机这个方法。
我只要面向接口去调用就好。根本不用关系你实现类中是如何写的。
小终结一下
1,面向对象, 可以不去看,不去关心,方法的内部结构。
2,面向接口, 可以不去看,不去关心,类的内部结构。
3,面向切面编程。(一会解释什么是面向切面编程)
如果我们想在原有的实现类中的方法上增加一些功能呢?
比如我想在我按下遥控器的开关键的时候,它可以开机的同时给我妈打电话。(表示给开机这个方法增加一些功能)
1,去修改源代码?
如果这个类是一些大公司写的。你去修改人家的源代码,这好吗? 这不好。
你修改的只是你本地下载的人家的源代码。等于你修改的这一套和你的程序绑定了,人家版本升级了怎么办 ?
所以不能修改人家的源代码,那么怎么再不修改源代码的情况下,增加功能呢?
2,继承。
当然可以。 但是还有一个问题。 假如同一个接口的实现类有很多呢?
为a实现类写一个类继承它,然后重写方法增加功能。
为b实现类写一个类继承它,然后重写方法增加功能。
为c实现类写一个类继承它, 然后重写方法增加功能。 。。。。。。
因为是实现的同一个接口,所以需要增加的功能也都一样。 这样写非常的繁琐。
相当于为了给 开机方法增加功能, 专门继承了遥控器,然后重写开机方法,增加给妈妈打电话的功能。 然后遥控器(实现类)有很多个,都要继承和重写开机方法。
所以这种方法不太好,不好在哪里呢?
1,很繁琐,继承每一个实现类,然后重写方法,增加功能。
2,即使你不嫌麻烦,那么你重写的时候也需要研究人家写的原有的功能。不能乱改啊,你要保证增加的功能和原有的功能都完美运行。
3, 即使你水平高超,可以看懂人家的原有功能的实现原理,且在不影响原有功能的基础上很好的增加了自己需要的功能。还有一个问题。
你增加的功能可能和原有的功能非常不搭。你增加的功能可能和原有的功能没啥关系。你把他们写在一起,很不好。 代码很乱。 功能很乱
综上所述继承然后重写添加功能不太靠谱。 (特别是对别人写类增加功能。)
3, 代理。
什么是代理呢? 其实就是一个类。 这个类有什么特点呢?
这个类的内部有一个属性 就是一个实现类。
你需要开机这个方法的时候,调用代理类中的开机方法, 代理类中的开机方法会调用真正的实现类。 并且在调用前后都可以自由的增加功能。
使用代理不用继承原有的实现类,不用重写,更改原有的方法。 解决了继承的后两个缺陷。
但是还是要为每一个实现类写一个代理。还是很繁琐。
4,动态代理。
要代理的实现类是不确定的。你给我哪个实现类,我就代理哪个实现类。 一个动态代理类。可以代理很多实现类。
以上三个问题都解决了
标签:功能,实现,重写,什么,面向对象,遥控器,开机,方法 来源: https://blog.csdn.net/qq_27857787/article/details/117898287