什么是多态

275 阅读2分钟

面向对象编程领域有个非常重要的概念,那就是多态,但是你真的理解这到底是什么意思吗?程序员该如何理解多态?

英文中的多态

多态一词其英文为“polymorphism”,在讲解多态之前让我们来分析一下这个单词。

这个单词其实包含了两部分,一部分是poly;另一部分是morph,这两个词在希腊语中是很多词的词根。

  1. poly,在希腊语中原指许多的意思,
  2. morph,原指形态,
  3. 现在这两个单词拼凑在一起的polymorphism意思就直白多了,在编程语言当中,面向对象编程有三大特性:封装、继承、多态。

多态啊 就是同种类型的对象,表现出的不同形态

多态的表现形式就是把子类的对象赋值给他父类的类型

封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。

当这样的javaBean类越来越多之后 类里面重复的内容就越来越多了

我们怎么解决的? 我们就要把同一类事物中共性的内容都抽取的父类里面,在子类里面我们就不需要再写一遍了从而提高了代码的复用性 在子类中可以访问父类中非私有的成员这就是继承。我们用继承去解决javaBean中代码重复的问题 。那么这个继承也是多态的前提条件

继承是为了重写父类代码。两个类若存在IS-A的关系就可以使用继承。,同时继承也为实现多态做了铺垫。多态是指用相同的接口去表示不同的实现。也就是父类引用指向子类对象

但是呢多态不是一个随便的人,不是想写就能写的 需要一些前提条件

image.png

我们可以用new关键字去创建一个学生对象 把这个对象赋值给 Student 类型

那就表示这个Student对象是学生形态 这也是我们以前创建对象的方式

有了多态以后我们在创建对象的时候还可以这么玩 可以把学生对象赋值给他的父类类型 Person。

那就表示这个学生对象是人的形态 那此时学生对象就有了两种形态 一个是学生形态 一个是人的形态这就是多态

例子

image.png

StringBuilder  append

ArrayList image.png

image.png