Java多态性,什么是Java的多态性
了解Java多态性
- 什么是Java的多态性(向上转型)
- 多态性的前提
- 为什么使用多态性?
- 多态性的使用
- 向下转型
- instanceof运算符
什么是Java的多态性(向上转型)
Java的多态性是事物的多种形态,是运行时行为(向上转型,子类可以赋值给父类),父亲的行为像儿子。
多态性的前提
- 继承性(必须有父类和子类,才会有把子类赋值给父类的情况)
- 子类重写了父类的方法(如果子类不重写父类的方法,调用的就还是父类的方法)
为什么使用多态性?
多态性可以减少重载函数的使用,可以调用子类重写后的方法
多态性的使用
当调用子父类同名方法同参数的方法时,调用只能调用父类中申明过的方法,但是实际上执行的是子类重写父类的方法(编译看左边,执行看右边)。也就是虚拟方法的调用。
主函数中,父类调用子类重写的行为
class Person {private String name;private String age;public String getName() {System.out.println("我是父类");return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}
}
在子类Man中
class Man extends Person{private String name;private String age;@Overridepublic String getName() {return name;}@Overridepublic void setName(String name) {System.out.println("我是男人的姓名");this.name = name;}@Overridepublic String getAge() {System.out.println("我是男人的年龄");return age;}@Overridepublic void setAge(String age) {this.age = age;}public void earnMoney(){System.out.println("男人可以赚钱");}
}
Person person=new Man();person.getName();//输出结果:我是男人的姓名
例:多态性减少重载函数的使用
想要得到父类的年龄,也想得到子类的年龄,要写两个重载函数
private void testAge(Man man){System.out.println(man.getAge());}private void testAge(Person person){System.out.println(person.getAge());}
然后再主函数调用
test.testAge(new Man());test.testAge(new Person());
使用Java多态性后,只需要保留一个方法
private void testAge(Person person){System.out.println(person.getAge());}
调用时:
test.testAge(new Man());test.testAge(new Person());
向下转型
在使用多态性的时候,父类new了一个子类时,其实子类的所有方法都会加载,但是如果父类没有申明子类的方法,也就是说子类并没有重写父类的方法,而是自定义了一个方法,那么我们如何使用多态性使得父类的对象能够调用子类的特有的方法呢?意味着需要将父类对象如果直接使用赋值符号,在基本数据类型中是有一个自动类型提升的说法,但是类类型的不能使用自动类型提升,只能使用强制类型转换。
Person person=new Man();Man man=(Man) person;man.earnMoney();
强制类型转换的时候会出现异常,比如如下情况:地址值相同但是类型不相同
Person person=new Man();Man man=(Man) person;Woman woman=(Woman) person;
为了避免这种情况,我们使用instanceof运算符
instanceof运算符
- a instanceof A 判断a 是不是 instanceof 的实例
Person person=new Man();if (person instanceof Man){Man man= (Man) person;man.earnMoney();}if (person instanceof Woman){Woman woman= (Woman) person;woman.goshopping();}
Java多态性,什么是Java的多态性相关推荐
- java多态机制优点_java面向对象多态性有什么好处?能说的简单易懂点,最好有代码实现结果信息,麻烦各位java大神回答一下?...
qq_炫_03909954 Java是面向对象的语言,多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成"一个接口,多个方法".Java实现运行时多态性的基 ...
- java父类引用子类属性_Java多态性详解——父类引用子类对象
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- java 父类获取子类对象_Java多态性详解 (父类引用子类对象)
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- Java校招笔试题-Java基础部分(三)
导语 Java 面试题集2021版 Java基础部分三 26.说说has a 与is a的区别 27.一个房间里有一把椅子,椅子有四条腿,房子和椅子是什么关系,椅子和椅子腿是什么关系? 28.什么 ...
- java常见面试题——java常见笔试题
注:转载自http://www.cnblogs.com/yhason/archive/2012/05/08/2489932.html,版权归其所有! 5.String是最基本的数据类型吗? 基本数据类 ...
- java复习系列[3] - Java虚拟机
文章目录 Java虚拟机 JRE 和 JDK 整体工作原理 类加载 class文件结构 类加载过程 双亲委派机制 运行时内存区域 整体划分 PC (Program Counter) JVM栈 局部变量 ...
- 【Java进阶营】Java面试题收集
1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Client/Server),客户端/服务端,桌面应用程序 2.你所知道网络协议有那些? H ...
- java面试题汇总 java面试题集合 - 网络收集
面试Java实习生时的一些面试题 分享到: 2011-09-26 14:42 作者: 来源:互联网 字号:T|T 摘要:还有一些针对我做过的项目问的一些问题.问了我许多问题中,大概有一半以上是回 ...
- 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏
基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...
- Java基础知识总结——java快速入门
逢考必过,祝复习考试的你,顺利通过,B站账号@狼群里的小杨,记得点赞收藏加关注,一键三连哦! 第一章 知识点总结 1.java语言的主要贡献者是James Gosling 2.开发Java应用程序的基 ...
最新文章
- ZABBIX(八) Zabbix 通知媒介
- Linux下多播的配置【十全十美】
- xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
- 线段树 区间加 gcd 差分
- clamav Java_ClamAV安装使用及API例子
- 关于字节面试过程不会的算法题总结
- elementui上传图片加参数_Vue + Element UI使用富文本编辑器
- php mysql追踪器_zf框架的数据库追踪器使用示例
- [置顶] Web开发百宝箱——提升网站档次的时尚 jQuery 图片滚动插件
- 花小钱办大事 888元血汗钱如何装电脑
- C++ OS 网络 数据库 (面试)
- 离线bootstrap_css下载
- 【Unity3D】Photon环境搭建
- 使无效html代码,blockquote p css无效,让blockquote p不缩进的方法
- python访问陌生人qq空间_用Python登录好友QQ空间点赞
- mysql创建表时出现10064错误
- 如何在Mac终端删除U盘的隐藏文件
- NginxWebUI--强大的nginx可视化配置工具
- 电脑主机选购---内存条,光驱
- 苹果xr如何截屏_苹果手机必备软件1