Java入门学习(2)多态的理解
来源:互联网 发布:玩游戏 手机 知乎 编辑:程序博客网 时间:2024/06/05 13:27
Java入门学习(2)多态的理解
面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。
多态存在的三个必要条件
**一、要有继承;
二、要有重写;
三、父类引用指向子类对象。**
class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A obj)...{ return ("A and A"); } } class B extends A...{ public String show(B obj)...{ return ("B and B"); } public String show(A obj)...{ return ("B and A"); } } class C extends B...{} class D extends B...{}
如下输出结果?
A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a1.show(b)); ① System.out.println(a1.show(c)); ② System.out.println(a1.show(d)); ③ System.out.println(a2.show(b)); ④ System.out.println(a2.show(c)); ⑤ System.out.println(a2.show(d)); ⑥ System.out.println(b.show(b)); ⑦ System.out.println(b.show(c)); ⑧ System.out.println(b.show(d)); ⑨
答案:① A and A② A and A③ A and D④ B and A⑤ B and A⑥ A and D⑦ B and B⑧ B and B⑨ A and D
这是对于多态的深入理解,解释如下:
1.实例对象为A,参数为对象B,B为A的子类。执行A.class中show(A obj)
2.同上
3.实例对象为A,参数为对象D,执行A.class中show(D obj)
4.实例对象依然为A,参数为B,本应执行A.class中show(A obj),但是,B.class重写了show(A obj),所以执行B.class show(A obj)
5.同上
6.执行A.class show(D obj) B中并没有重写。
7,8.实例对象为B,参数为B或者B的子类,执行show(B obj)
9.实例对象为B,参数为D,因为B继承自A,也可以执行A中的show(D obj)
其中:
A a2 = new B();
栈中的引用变量是A,堆中的实例变量是B。
将子类的实例,赋值给父类的引用。就是向上转型。
向上转型,在运行时,会遗忘子类对象中与父类对象中不同的方法。也会覆盖与父类中相同的方法–重写。(方法名,参数都相同)
所以a2,可以调用的方法就是,A中有的,但是B中没有的方法,和B中的重写A的方法。
理解了吧,少年!
0 0
- Java入门学习(2)多态的理解
- Java入门学习-理解super,this,@override的用法
- Java入门学习-理解int,String,理解类、方法,理解return的用法。
- 学习JAVA的理解2
- java 多态的理解(2)
- Java入门学习-深入理解集合
- Java入门学习-理解I/O
- Java入门学习-自我理解IO流
- java多线程入门到理解学习笔记
- 《深入理解JAVA虚拟机》学习笔记(七)JAVA多态的实现:动态分派
- Java的入门学习
- Java学习笔记——多态的理解
- java学习笔记最难理解的多态
- java学习中对多态的理解
- java入门、java学习:如何理解Java面向对象
- 关于SAP初入门学习的理解
- Hibernate入门学习之配置文件的理解
- 讨厌的java入门学习2
- JDK7和JDK8中HashMap的结构优化
- Android--多线程之Handler
- SQL Server如何保证可空字段中非空值唯一
- jQuery插件开发教程
- 一个优秀的提交应该包含什么?
- Java入门学习(2)多态的理解
- STM32之CAN---接收管理分析
- 产品版本控制
- Android实现推送方式解决方案
- linux 命令总结
- 关于多个notification时,其他notification点击无效的解决办法
- 我的第一篇博文
- 使用maven profile实现多环境可移植构建
- CardView