Java特性之——多态
来源:互联网 发布:软件一键位安装 编辑:程序博客网 时间:2024/05/21 05:39
先来回答一个问题,java的三大特性是什么?
没错,是封装、继承、多态。
在这儿,简单记录一下多态是什么意思,然后举一个比较实用的例子。
一、什么是多态。
我个人理解,多态就是:父类的引用指向子类的对象。
比如:
Parent是父类,Girl是继承了Parent类的一个子类,那么:
Parent p= new Girl();
这就多态。
二、实现多态的条件。
三、多态的原理。继承、实现为实现多态提供了基础,但是还需要:重写。(注意不是重载)。
多态的实现,其实就是java提供父子类指尖的自动向上转型功能。
四、优点与弊端。
先说优点:
如果我们定义了一个指向子类对象( new Girl() )的父类引用(Parent p中的p ),那么它除了能够调用父类的方法外,还能调用在子类中对父类方法重写(Override)的方法:(其实还是相当于父类的引用调用了父类中的方法,只不过该方法在指向子类的对象中被重写了,所以最后输出的是被重写的行为)
再说弊端:
多态是可以调用所有父类中的方法,也可以调用指向子类对象中的方法,但是如果该方法是子类特有的方法,或者是对父类中的方法进行了重载(Overloading),那么是无法调用的(你可以在子类中写一个不同于父类方法名的方法,当你使用父类引用打点调用方法的时候,你会发现,根本就找不到这个方法)。
五、举例说明。
假使有个父类Parent。
有一个继承了Parent类的子类Girl。
现在需要一个入口测试。
输出结果:
--------girl.sys-------- 父类的引用p调用了sys方法,但是最后输出的是指向子类对象girl中对该方法重写的行为。
------parent.unique----- 父类的引用p调用了unique方法,指向的子类对象没有对该方法进行重写,所以输出的是父类中该方法的行为。
六、网上经典案例。
问,如下形式,会输出什么
A a = new B();
B b = new B();
system.out.println(a.show(b));
结果:
B and A
解释:
父类的引用a指向了子类B的对象,因为子类中Show (B obj)子类的是重载,并不存在于父类中,所以a.show无法调用子类中这个重载的方法,所以最后输出的结果肯定不会是“B and B”。
因为A是B的父类,所以父类引用a其实调用的是父类中a.show(A obj)这个方法,又因为子类B对该方法做了重写,所以最后输出的是子类中该方法的行为:"B and B".
在这儿,留下一个多态的优先级,能看懂当然最好,看不懂的先有个疑问,以后肯定会恍然大悟的:
this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
简单提示一下,this表示父类引用指向的子类,super表示父类
七、最后留一个遇到过的例子吧。
在第五步中中,有一个父类Parent,有一个子类Girl,现在再添一个子类Son:
下面有一个main方法,大家可以仔细看一下,想一下。
输出结果如下:
--------girl.sys--------
-------son.sys------
什么?你说不知道什么时候有用?
其实我也不知道什么时候该用,反正到时候肯定就知道了。
如果有不懂,或是不理解的同学,可以私信我,或者是下方留言,我看到后会及时回复的。
虽然,,,我也是一个小白。
- Java特性之——多态
- java提高篇之理解java的三大特性——多态
- java提高篇之理解java的三大特性——多态
- java提高篇之理解java的三大特性——多态
- java提高篇之理解java的三大特性——多态
- java三大特性之————封装
- 黑马程序员———java高级特性之枚举
- 黑马程序员——java之JDK1.5新特性
- 黑马程序员—Java基础之—JDK新特性
- Java 三大特性之——继承
- Java 三大特性之——继承
- Java SE——三大特性之封装
- Java 三大特性 —— 多态
- Java 三大特性 —— 多态
- java三大特性——多态
- Java三大特性之---多态
- java基础之三大特性 多态
- Java三大特性之继承+多态
- python学习日记
- 微信小程序tap点击和长按冲突解决
- 自学者的困惑。
- VS与VC版本对应
- 简单实现类似购物网站中的固定定位
- Java特性之——多态
- app底部导航
- java commons库之一:lang(3)日期、文本、数字操作
- 如何将项目部署到tomcat之外
- 使用Cookie的B2C的电商系统购物车的业务逻辑
- 笔试
- A Brief Intro to Daily Scrum
- JetBrains IDE Support 调试工具(页面自动刷新)
- Mysql存储过程------存储过程的基本概念和基本使用方法