面向对象思想之多态

众所周知,面向对象思想中的三大特性是继承、封装和多态。

多态,即类型上的多种状态。就是一个父类类型的变量可以引用子类的实例。看似很抽象,但是在面向对象思想中是最为核心的内容。那么到底何为面向对象,什么是多态?首先我们来看一下面向对象思想。面向对象思想的中心目的是为了减少代码冗余度,提高代码的复用率。通俗点来说,就是少些代码了。而且面向对象思想更符合人类的思想,简化了开发。而多态就是为此产生的。举例:Person类是Student与Teacher类的父类。那么用多态的写法就是Person p1 = new Student()或者Person p2 = new Teacher();这就是我们经常说的类型上的多态。那么多态怎么就能提高代码的复用率呢?我们先来理解下多态。生活中经常有这样一种奇怪而又顺理成章的例子:

小明今年3岁,刚刚接触事物(Object),在他的思想里还是一种抽象的概念,所以小明经常会问妈妈,这是什么东西?那是什么东西?有一天小明和妈妈去动物园游玩,看到了一个金丝猴,但是小明之前从未见过金丝猴,小明出人意料又顺理成章的问了妈妈一句话:妈妈,那个是什么动物啊?在小明的思想里,他理解什么是动物,动物对于小明来说,他是理解的。那么小明在提问的过程中,用了一个动物的名称来代替动物园的金丝猴,那么小明是理解金丝猴这个对于他未知的动物是具有动物类型的特性的。所以他用了动物类型变量引用了金丝猴实例对象。换句话说这个金丝猴实例可以有多种状态,小明完全也可以问:那是什么生物?那是什么东西?甚至我们可以说那是什么Object,因为我们知道万物皆为对象(Object),而Object就是所有类的根类。所以一个Object类型变量可以引用任何类的实例。当然这种多态必须是存在于继承关系中,小明是不可能问妈妈那是什么植物的。这就是我们所说的生活中的多态。那么在Java中多态到底有什么用呢?提高代码的复用!!

public class 人{

public void 旅行(){

//没有任何方法参数,证明一个人类实例旅行的过程中是不需要任何数据支持。

}

public void 旅行(车 a){

//一个重载的方法,旅行的过程中需要一个车类型的实例对象

}

public void 旅行(飞机 a){

//一个重载的方法,旅行的过程中需要一个飞机类型的实例对象

}

//等等,等等

}


那么我们会发现同一个功能有多种不同的实现方式,那么我们经常说叫做方法的重载。那么有没有一种办法可以省略以上方法的重载呢?

这个时候我们就可以利用多态来完成代码的复用。

修改上述代码为:

public class 人{

public void 旅行(交通工具 a){

}

当然我们应该把交通工具类作为所有具体类的父类。这个时候就完成了代码的复用。


这只是初学者在学习的过程中对于多态的理解,但是我们进一步进入到抽象层,会发现在深层次理解多态的过程中,又出现了问题。也有很多人,听的看的都非常的清楚,但是在具体实现某个功能时,就会出现很多的问题。现在我们进入到抽象层面来分析,这里我们拿JDBC举例说明。我们都知道JDBC提供了一个规范,这个规范中存在大量的接口,而我们知道一个接口是没有任何具体实现的方法,都是抽象方法。学过JDBC的同学清楚,JDBC可以去连接任意一个数据库,而JDBC中接口的具体实现是由不同的厂家来完成。那么对于我们开发人员来说只要关注JDBC中的规范即可。那么在JDBC中就有大量的关于多态的应用。我们很少去探究多态内部的原理,但是在不知不觉中就已经运用了大量的多态。这就类似于开发人员只要识别JDBC中的接口即可,具体实现由它的实现类来完成。

微信:helloxjc

探讨更多的问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值