当前位置:网站首页 > 技术博客 > 正文

java多态解释



今天我们要讲解的是面向对象语言三大特征之一的多态。

多态是同一个行为具有多个不同表现形式形态的能力。

多态性是对象多种表现形式的体现

比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性。

接下来让我们了解多态的表现形式。

 

由上面的例子可知 猫这个对象具有多态的性质,他可以作为宠物这个形态也可以作为猫这个形态。

那么我们可以想想为什么猫可以有多态呢。

多态的前提

  • 有继承/实现关系
  • 有父类引用指向子类对象
  • 有方法的重写

继承关系很简单,宠物就是猫的父类。

父类引用指向子类对象就是:

 

f就是父类的引用 等于号就等同于指向 new Zi 就是创建子类的对象。

那什么是方法的重写呢?

方法的重写

当父类的方法不能满足子类现在的需求,需要进行方法的重写。

书写格式:

在继承体系中,子类出现了和父类一样的方法,我们就称子类这个方法为重写的方法。

@Override重写注解

注解其实和注释差不多,注释是给程序员看的,注解是给程序员和虚拟机看的。

当虚拟机看到这个注解,那么它就知道这个方法是要重写父类的方法,它会检查该方法的语法错误。

  1. @Override是放在重写后的方法上,检验子类重写时语法是否正确。
  2. 加上注解后如果有红色波浪线,表示语法错误

我们来给个例子加深理解

 

在这里Dog和Cat俩个类中都重写了父类Pet中的eat和drink方法。

倘若现在有一个需求:需要我们写一个教务系统。

那么这个教务系统里肯定有用户的注册吧,用户的类型有学生,教学老师,辅导员,系统管理员。

 

有这么多用户的类型,那登录方法里的形参要放什么对象呢?

如果只放学生对象,老师,辅导员,管理员对象就都不能调用register方法,这肯定不行啊。

那放其他类型的肯定也不行,这时候方法的形参就需要放他们的父类。

 

由于JAVA中的多态,所以无论是学生,教学老师,辅导员,管理员都可以调用方法注册这个系统。

其实多态还允许调用不同类里重写的方法。

假如你是Student对象 注册学生就会调用Student里的show方法。

其他对象同理。

这样是有好处的。

多态的好处:

可以使用父类型作为参数,可以接受所有子类对象,体现多态的扩展性与遍历。

其实多态调用成员变量和成员方法是不同的。

变量调用:编译看左边,运行也看左边。

方法调用,编译看左边,运行看右边。

那么我们通过一个例子来理解一下。

 

那么我们再来理解一下为什么会有这样的规则呢?

 

现在是用p来调用变量和方法的,而p是Pet类型的,所以默认都会在Pet中找。

这就是为什么编译要看左边的原因。

接下来我们看看成员变量和成员方法的不同点。

成员变量:在子类的对象中,会把父类的成员变量也继承下来。用父类对象调用肯定就是父类里的name了。

成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法覆盖的

所以子类虚方法表中只有重写后的eat方法,当然运行的也是这个方法了。

如果有宝子们不知道什么是虚方法可以看我的上一篇博客,里面有详细讲解.

恭喜你! 当你看到这里就已经完全掌握多态这个知识点了,如果你有什么疑问和意见,欢迎在评论区询问或者私信我。

看完麻烦各位哥哥姐姐们点点赞收收藏,你们的支持就是我分享的最大动力。

那么这一篇博客就到为止了,我们下篇再见!

版权声明


相关文章:

  • 索引创建的目的2024-11-21 12:01:04
  • c语言编程题经典100例2024-11-21 12:01:04
  • malloc 库文件2024-11-21 12:01:04
  • 交叉验证的作用2024-11-21 12:01:04
  • c++ 迭代器原理2024-11-21 12:01:04
  • 生成树科技有限公司2024-11-21 12:01:04
  • STM32F42024-11-21 12:01:04
  • ncurses linux2024-11-21 12:01:04
  • 二叉树遍历 c语言2024-11-21 12:01:04
  • 面向对象设计的3个基本特征2024-11-21 12:01:04