网站首页 > java教程 正文
前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~
首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形态,也可以理解为事物存在的多种体现形态(父类的引用类型变量指向了子类对象,或者是接口的引用类型变量指向了接口实现类的对象) 多态的前提:必须存在继承或者实现关系。 多态要注意的细节:
- 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
- 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
- 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
- 多态情况下,不能访问子类特有的成员。 小结:多态情况下,子父类存在同名的成员时,访问的都是父类成员,除了在同名非静态函数时才是访问子类的。
下面开始正式的内容
一、概念:
多态体现为父类引用变量可以指向子类对象。
多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
二、定义:
父类类型 变量名 = new 子类类型();
变量名.方法名();
三、多态的成员特点:
成员变量:编译运行都看左边(父类);
成员方法:编译看左,运行看右(子类)。
四、instanceof 关键字
用instanceof关键字来判断某个对象是否属于某种数据类型(若是根本没关系的话,直接编译失败;编译成功可能为父元素的另外一个子元素)
五、多态-转型:
1、向上转型:
当有子类对象赋值给一个父类引用时,便是向上转型。-------多态本身就是向上转型的过程
父类类型 变量名 = new 子类类型();
2、向下转型:
一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。
在多态的基础上才可以的,也就是得先向上再向下的!
向下转型后调用对象和方法时,都是调用的子类的方法;也可以调用子类独有的普通方法。
子类类型 变量名 = (子类类型) 父类类型的变量;
六、多态的优劣:
1、什么时候用向上转型:
当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。
2、什么时候用向下转型:
当要使用子类特有功能时,就需要使用向下转型。
向下转型的好处:可以使用子类特有功能。
弊端是:需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。在转换之前必须做类型判断。(有可能转到另外的一个子元素上,这时候就需要instanceof 判定下是不是所需要的数据类型)
Person p1 = new Student(); // 前提条件,学生类已经继承了人类
boolean flag = p1 instanceof Student; //flag结果为true
boolean flag2 = p1 instanceof Teacher; //flag结果为false
看过的朋友们,如果觉得对你有帮助,记得动动小手点个赞~需要Java基础教程的可以后台回复我【Java】关键字~
猜你喜欢
- 2024-09-27 Java多态重载和重写(类方法设计中多态与重载的区别是什么)
- 2024-09-27 什么是多态?Java为什么要用多态?(java中什么是多态性)
- 2024-09-27 别找了!月薪30k的T6大佬整理的Java多态知识点总结,限时收藏
- 2024-09-27 三十一、Java面向对象编程特性-多态
- 2024-09-27 Java多中包括态理解、多态实现、重写、转型和抽象类
- 2024-09-27 Java中的封装、继承和多态,你真的都懂了吗
- 2024-09-27 java基础之多态与向上转型,很用心的一篇笔记
- 2024-09-27 Java多态的介绍-学习日志(java的多态是什么)
- 2024-09-27 Java路径-25-Java多态(java路径错误)
- 2024-09-27 Java中的多态(基础语法)(java多态的定义和应用)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)