当前位置: 首页 > news >正文

Java 多态

多态简单引入

如果你看上面的引入感觉一脸懵逼,baby这是正常的,下面让我来为你讲解,在讲解之前作者了解了一部分Idea的快捷键,现为大家分享一下,节约大家敲代码的时间。

IDEA常用快📕敲代码的快捷键

IDEA敲代码的快捷键
快速补全代码
Alt + /
快速生成含有任意形参的构造器和私有属性Getter/Setter等方法
Alt + Insert
快速显示类结构,可以显示类中包含的所有属性和方法
Alt + 7
快速提示完成,在代码存在语法问题时,IDEA 会提示使用该快捷键自动修正语法
(功能非常强大,最常使用)
Alt + Enter

本文主要用到快速生成含任意形参的构造器与私有属性的Getter/Setter方法

🆗,下面我来正式介绍多态。

简单定义

在 Java 中,面向对象的多态是指允许不同的对象对同一消息作出响应,即同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

还是不好理解,那我们看截图

多态主要分为运行时多态和编译时多态,本文重点介绍运行时多态。

运行时多态

变量运行特点

乍看上面图片,可谓是一脸懵逼,因为作者当时就是这种感受。

所以作者为大家准备了代码讲解

先看变量调用(两个“左”):

两个“左”:
编译看左边:Java 编译代码的时候,会看左边的父类中有没有这个变量。有,则编译成功,没有则失败
运行看左边:Java运行代码的时候,实际获取的是左边成员变量的值

上述很明显,对于:

Animal a = new Dog;

 运行结果:

 运行结果是 动物,和左边父类变量值一样。


下面看成员方法调用中的一“左”,一”右“。 (如果你理解了变量的两“左",这个和那个类似,很好理解)

一“左”,一“右”
编译看左边:java编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,反之失败
运行看右边:java运行代码的时候,实际上运行的是子类中的方法

比如上面代码:

a.show();

结果是 Dog,运行的是右边子类的方法。

多态前提

继承关系的表现:

成员变量:在子类的对象中,会把父类的成员变量也继承下来(例如 父:name,子:name)

方法重写:

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

补充:虚方法表介绍(非private,final,static的方法)

多态的优缺点

 优点

缺点

解释:因为在多态中,如果子类特有的,父类没有,那么在运用时就会报错 ,所以不能使用子类的特有功能。

但是,这是有解决方法的:将原本准备用多态的父类类型转换为子类类型

作者关于多态的自己代码

Main函数

public class Main {public static void main(String[] args) {Person li = new gouso();li.setAge(10);li.setName("fish");sogou xin = new sogou();xin.setAge(30);xin.setName("jijiao");gouso ji =new gouso();ji.setAge(20);ji.setName("jinitaimei");register(xin);register(ji);register(li);}public static void register(Person p){p.show();p.know();}
}

 父类

public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void  show (){System.out.println(name+","+age);}public void know() {System.out.println(name+","+age);}
}

子类

public class sogou extends Person {public void show(){System.out.println("学生信息为   "+getName()+"jinitaimei"+getAge());}public void know(){System.out.println("我看过"+getName()+"    ,但这是"+getAge()+"年前的事情了");}}
public class gouso extends Person {public void show(){System.out.println("鸡的信息  "+getName()+"oh baby"+getAge());}
}
上面是作者自己的代码,大家可以拿去在idea上面直接复制粘贴,然后就能运行

运行结果

总结

多态,在作者看来是连接父类与子类的方式,以父类型作为参数,接收子类,大大提高了开发的速度与便捷性。本文有点肝了,消耗了作者很多心血,因为作者准备进入面向对象的接口(那是作者目前觉得最重要的一章),所以在前面就不过多停留了,如果文章出现错误或者你有不懂的地方欢迎来与作者讨论。

相关文章:

  • 怎么安装python3.5-以及怎么在这个环境下安装包
  • 【解决】Vue + Vite + TS 配置路径别名成功仍爆红
  • Linux常见压缩格式详解
  • Python Cookbook-6.7 有命名子项的元组
  • 量化研究---小果全球大类低相关性动量趋势增强轮动策略实盘设置
  • RHCSA Linux系统 用户和组的管理
  • Kubernetes相关的名词解释Service(15)
  • 海事局发布《船舶智能监控系统技术指南(1.0)》,解读智驱力产品为何成为最佳选择!
  • Linux系统管理与编程13:基于CentOS7.x的LAMP环境部署
  • 高校如何通过打造数字人生态实训室,实现教学改革
  • Java 排序梳理 sort
  • 判断链表是否为环(Java版本自己用)
  • 远程服务器的mysql连接不上,问题出在哪里
  • 高尔夫球规则及打法·棒球1号位
  • aws服务(四)文件存储服务S3 介绍使用代码集成
  • 2024年TETCI SCI2区:增强差分进化麻雀搜索算法DSSADE,深度解析+性能实测
  • 安恒Web安全面试题
  • OpenCV第5课 图像的基本操作
  • 【LaTeX】图片大小调整和并排放置
  • 高品质性价比之王-特伦斯便携钢琴V10
  • 新增1839个!2024年度本科专业备案和审批结果,公布
  • 前瞻2025丨无糖茶,站在转折点?
  • 最新民调显示特朗普支持率降至上任以来新低
  • 30小时已过,俄罗斯复活节停火不再延长
  • 运油-20亮相中埃空军联训
  • 五一出境游火爆:境外包车订单增长25%,日本酒店价格贵了好几倍