我们把「数据」和「能力」组合成一个对象的过程就叫做「封装」 。
封装的结果就是可以有一个类,通过这个类我们可以获得一个对象 。然后我们就可以通过给这个对象下命令,让他执行自己的「能力」 。
除了把「数据」和「能力」封装成一个「对象」更加方便使用以外,还有啥其他的特点么?

文章插图
封装只是面向对象的第一步,目的是把现实世界的东西抽象成对象 。面向对象真正有威力的地方是「继承」和「多态」 。
举一个不是很恰当,但是女朋友比较容易理解的例子 。
我们使用外卖软件点餐,当我们第二次去某一家店时,外卖软件会提示你上一次你在这家点了什么,你可以点击<再来一单>把上次的菜品直接加到购物车中,这就是「继承」 。而在购物车中的物品你可以直接付款下单,也可以把增删和修改菜品 。这就是「多态」 。
什么是继承?
在面向对象编程中,当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类「继承」这个父类 。继承后子类自动拥有了父类的部分属性和方法 。
通过继承创建的新类称为“子类”或“派生类” 。
被继承的类称为“基类”、“父类”或“超类” 。
比如:
狗{ 吠();}牧羊犬 继承 狗{ 放羊();}上面的例子中,狗类是父类,牧羊犬类是子类 。牧羊犬类通过继承获得狗类的吠()的能力,同时增加了自己独有的放羊()的能力 。转换成JAVA代码如下:
public class Dog{ public void bark(){ System.out.print("旺旺旺"); }}public class HerdingDog extends Dog{ public void herd(){ System.out.print("放羊中...."); }}public class Main(){ HerdingDog dog = new HerdingDog(); dog.bark(); dog.herd();}
什么是多态?
同一操作,作用于不同的对象,可以产生不同的结果,这就是「多态」 。通常说的多态都是指运行期的多态,也叫动态绑定 。
要实现多态,需要满足三个条件:
有类继承或接口实现、子类重写父类的方法、父类引用指向子类的对象 。比如:
犬科动物{ 吠();}狗 继承 犬科动物{ 吠(){旺旺旺}}狼 继承 犬科动物{ 吠(){嗷嗷嗷}}
狗和狼都是犬科动物,拉来一直犬科动物,如果它你叫的话,你可能没办法直接分辨出他到底是狼还是狗 。只要他真正的叫出来的时候,你才知道 。这就是运行时多态 。转化成Java代码如下:
public class Canidae{ public void bark();}public class Dog extends Canidae{ public void bark(){ System.out.print("旺旺旺...."); }}public class Wolf extends Canidae{ public void bark(){ System.out.print("嗷嗷嗷...."); }}public class Main(){ Canidae canidae = new Dog(); canidae.bark(); Canidae canidae1 = new Wolf(); canidae1.bark();}
这样,就实现了多态,同样是Canidae的实例,canidae.bark调用的就是Dog类的方法,而canidae1.bark();调用的却是Wolf的方法 。
有人说,你自己定义的对象,定义的时候不就知道canidae到底是什么类的对象了么,这个其实并不决定的,很多时候我们可能不知道,原因是,对象可能并不是我们自己new出来的,比如Spring的IOC 。
奥,那我终于知道什么是面向对象编程了 。

文章插图
嗯,对了,外卖点好了么?

文章插图
呃....

文章插图
(全文完)
文章来源:https://dwz.cn/gd0GXLFX
作者:漫画编程
推荐阅读
- 什么是端口转发?什么是端口映射?如何设置端口映射?
- 抖音火山版怎么赚火力 抖音火山版如何使用
- iphone铃声开场原版 iphone如何设置铃声
- MVP战绩支持分享 王者荣耀如何分享游戏
- 快手新主播直播技巧 快手直播新手如何直播
- 开一年纯电动车能比燃油车省出几个钱?来给你算一笔账
- 手机连接WiFi后,要不要关闭数据流量?中国移动给出了答案
- 初学跑步如何循序渐进?3个步骤让你爱上跑步
- 北京自己如何交社保
- 如何判断发动机有没有积碳?老师傅教你一招,不用拆缸
