面向对象的感悟

面向对象:面向对象可能对于学c++和java语言的人来说,这个词语真的很熟悉。不管你承不承认,作为应届生我自认为这个词语一直伴随大学生涯。说到面向对象,就想到自己的对象问题,new一个对象常常是我经常和别人开的玩笑,哈哈,肯定有一大批程序员说,当程序员还要个毛线的对象,而实际情况是对象在java中无处不在。
我对java的理解是:java本身是一种编程语言,但是它的魅力可能跟网上说的可移植性,可拓展性,强大的生态圈,易上手等有那么一点的关联。在我看来,java的伟大之处在于:将万物皆对象这句话,真的灌输到java的各个层面,这种始终如一的编程思维,真的是难能可贵。
说到面向对象真的离不开几大关键词:封装,继承,多态,抽象。我来说说我的看法,当做博客生涯的开头,有不足的地方希望大家指正。

封装:我们的生活太多东西过于裸露,假如在你面前有一堆钻石,在非洲这可能很常见,矿里面有很多钻石,大家司空见惯,在我们国内,钻石可以被奢华的盒子包装好,这样这颗钻石就变得很神秘,甚至很值钱。
需要封装的地方还有比如厕所的抽纸,卫生间放一个盒子,管理员放入卫生纸,只要留出一个口子,咱们就可以从口子里面拿出在可控范围内源源不断的纸。这正好满足了我们的生活需求,我们只需要知道那里有一个口子,我们从口子那个地方取我们想要的东西。所以封装就是将不必展示给外界的所有东西,用一个"盒子"去装起来,然后我们只需要从一个"口"去取我们想要的东西。
在java中,比较浅显易懂的封装,估计就是类的成员属性了,我们定义class类对象大多都是private起头,为啥?难道没有其中的原因所在吗?当然有!类生成对象,对象使我们java世界中组成元素。我们作为管理员,不可能希望我们所有的"宝贝"元素来展示给别人看,就假如对于我这种直男说,我喜欢的女朋友,是不希望人家多看她一眼的,哈哈。扯回来,咳咳,所以有的成员变量也跟女盆友一样,是很重要滴,需要用某种可见控制符来控制。这里就用到了Private关键字,这个关键字让除了本类之外的所有对象无法访问。当然,女朋友并不是你的私有物品,她也要与外界交往,交流。那没办法,想个法子吧,凡是要见我女朋友的都要经过我的用意,很变态有没有哈哈。java中可以实现这种变态的要求,get和set方法,就是为有这种变态想法的程序猿准备的。不要以为get和set方法是那种用idea之类的工具一键生成的,其实他可以写各种鉴别规则,来让谁来访问我这个对象。get和set方法里面都可以写校验规则,理解的人自然都懂,不理解的,嘿嘿,。。
总之:封装能让我们就像钻石被包装一样让咱们的代码变得高大上,前提你的代码够优雅,也可以满足我们某种变态的需求等等。
继承:继承这个词对于看韩剧的同学们是不是在哪里看过,以前我记得有一部韩剧很火,叫做《继承者们》,哇塞各个都好帅,有钱多金。想要跟他们一样,来我们一起看看继承,学好继承,咱们离有钱又多了一步。哈哈。。。
在java继承存在于父类和子类之间,父类定义了一些成员变量和方法,子类看到这些也想要,那怎么办,就拿出extends法宝,表示我是您的儿子啊,你的不就是我的,所以父亲没办法,把自己表面上的财富都可以继承给儿子。至于为啥说只是表面上的,你懂我也懂,哈哈。父亲平时里那么辛苦,当前有自己的私人空间,这些被父类定义为private的属性和方法正是父亲的私有财产。你说你是儿子,必须继承过来,往往父亲会很疼爱你的,假装全都给你了,其实你完全访问不了,哈哈。厉不厉害。Java中,父类的public属性和方法可以被子类完美的继承和访问,但是私有属性可以继承,但不可以被访问。继承更多的是为了复用代码,让自己实现同样的功能不再那么费力,但是在继承这些复用代码的同时,又可以定义自己的特有方法,这就是继承的魅力了,真的跟现实一样,儿子往往遗传了父亲,但不少儿子比父亲更优秀。咱们的java中,子类就是这种优秀的孩子,完全可以拥有自己小天空。继承还是后来要看到的多态的一种必要条件,多态才是咱们面向对象,最最最最最最精髓的地方,真的,它太神奇了。
多态:态,顾名思义为状态,形态。有多个状态,面对一件事情有多个状态,善变,变化莫测。当时在学java多态的时候大脑中会有这些概念,认为多态就是这样变化多端的事务。后来学习了多态,才知道什么叫做神奇。在java中,不到代码运行,你都不能确定编译器正在调用哪个对象的当前方法。正是这种动态绑定机制让java的多态得以实现首先定义首先定义这里插入图片描述
首先定义一个父类Animal,dog类可以继承Animal,Animal有num和show方法,且都是共有方法,大公无私的父亲啊。子类Dog在继承父类的show方法基础上,并重写了show方法,而且自己很调皮的新增了一个method方法。在我们的main函数中,Animal a=new Dog();初学者可能对于这种写法有点疑惑,因为我们平时接触到的都是Animal animal=new Animal();或者Dog dog=new
Dog() 之类的创建对象写法。首先这里这种写法肯定是正确的,因为从我么宏观的角度来看,我创建一个动物对象,是一条狗。把狗这个对象上升到动物的维度,这肯定是没问题的对吧。只是访问这个对象的属性时,会访问到父类的属性。重头戏来了,在a.show() 这段代码中,按照常理来讲应该是调用Animal的show方法,但是我可以很肯定的告诉你,代码运行结果是Dog。因为这就是多态在起作用,当我们子类去重写父类的方法时,编译器对这种东西超级敏感的,他会先去子类检查有没有同名的重写方法,然后如果有,那就直接调用子类的重写过后的方法,这是不是很神奇,编辑器这样是不是在一定程度上给我们编写代码提供了一定程度上的灵活性。举个例子public int (Animal animal) 这里面你随便传继承Animal的对象都没有问题,如果存在重写,编译器会动态绑定你的对象和方法。多态能举的例子还有太多太多,慢慢品尝。。
抽象:抽象也是面向对象家族中的一员,我看来是一种站在一种高度去思考问题的方式,我们平时在准备做一件事情的时候,可能要求自己去关注这个事情的方方面面,力求每个细节点都能完美无缺。比如我要做一顿饭,从买菜,淘米,煮饭,烧菜所有的方方面面我们都要去弄清楚,这是一直面向过程的做法,是一种违背面向对象原则的思考方式。真正面向对象的方式可能就很简单,我需要一个厨师对象,厨房对象,就可以做出一顿美味的午餐。至于厨师怎么做菜,厨房有哪些做菜的工具,我不需要知道,我只求结果,我提供给你这些对象就行。是不是很霸道。。
以上是我对面向对象的一些浅薄的见解。谢谢。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值