Java学习笔记(33)-- Java 多态的详解
来源:互联网 发布:制作livephoto的软件 编辑:程序博客网 时间:2024/06/07 23:35
1.什么是多态?
一个对象的多种状态
比如:
教师 a =老钟;
员工 b= 老钟;
2.多态体现
(1)Father类
非静态成员变量x
静态成员变量y
非静态方法eat,方法体输出父类信息
静态方法speak();方法体输出父类信息
(2):Son类
非静态成员变量x
静态成员变量y
非静态方法eat,方法体输出子类信息
静态方法speak();方法体输出子类信息
Son类继承父类
1:创建Father f=new Son();
这就是父类引用指向了子类对象。
想想下列问题:
问f.x=?(非静态) --1
问f.y=?(静态) --2
问f.eat()输出的是子类还是父类信息?(非静态)----子类
问f.speak()输出的是子类还是父类信息?(静态)----父类
运行效果如图:
那为什么会有这样的结果呢?看下面的总结~
3.总结:
(1)当父类和子类具有相同的非静态成员变量,那么在多态下访问的是父类的成员变量
(2)当父类和子类具有相同的静态成员变量,那么在多态下访问的是父类的静态成员变量
所以:父类和子类有相同的成员变量,多态下访问的是父类的成员变量。
(3)当父类和子类具有相同的非静态方法(就是子类重写父类方法),多态下访问的是子类的成员方法。
(4)当父类和子类具有相同的静态方法(就是子类重写父类静态方法),多态下访问的是父类的静态方法。
4.多态体现-总结:
(1)父类引用变量指向了子类的对象
(2)父类引用也可以接受自己的子类对象
5.多态前提:类与类之间有关系,继承或者实现
6.多态弊端提高扩展性,但是只能使用父类引用指向父类成员。
7.多态特点非静态
(1)编译时期,参考引用型变量所属的类是否有调用的方法,如果有编译通过。没有编译失败
(2)运行时期,参考对象所属类中是否有调用的方法。
(3)总之成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点,无论编译和运行参考左边(引用型变量所属的类)。
在多态中,静态成员函数特点,无论编译和运行都参考左边
8.多态的作用(1)多态可以作为形参,接受范围更广的对象,避免函数重载过度使用。
效果图:(2)多态可以作为返回值类型
效果图:(3)抽象类和接口都可以作为多态中的父类引用类型。
看第一个作用的例子~
9.多态类型转换
如何在多态下,使用父类引用调用子类特有方法。
(1)基本类型转换:
自动:小->大
强制:大->小
(2)类类型转换
前提:继承,必须有关系
自动:子类转父类
强转:父类转子类
效果图:好了,多态就写完了~
- Java学习笔记(33)-- Java 多态的详解
- Java学习笔记(83)----------继承详解
- Java 多态笔记详解
- Java学习笔记(54)----------详解Java IO(全面)
- Java学习笔记(15)--Java String类详解(二)
- Java学习笔记(21)-- Java 代码块详解
- java学习笔记---浅谈java多态的注意要点
- JAVA学习笔记(一)类的多态
- 学习Java的笔记
- Java的学习笔记
- java的学习笔记
- java的学习笔记
- java中的多态(学习笔记)
- java 多态学习笔记
- Java多态学习笔记
- JAVA多态学习笔记
- Java多态学习笔记
- Java学习笔记(25)--继承(extends)详解
- 未来数据中心网络的三大武器: SDN、Overlay、VDC
- oracle中Varchar2和nvarchar2的区别
- HDU 1827 Summer Holiday 强连通缩点
- dva+react+ant.design
- 博客开通
- Java学习笔记(33)-- Java 多态的详解
- 位运算之左移右移运算之详解
- 浏览器内核详解
- leetcode Reshape the Matrix 重置矩阵
- Python3安装Scrapy
- 第4周【项目1
- 欢乐上墙的使用手册
- ERROR: Cannot load message class for [自己定义的message]. Are your messages built?
- Elasticsearch Kibana (Beats Logstash) X-Pack Angular