从头认识java-6.5 向上转型
2015-11-01 23:01
169 查看
这一章节我们来讨论一下向上转型。
1.例子
上面的例子中,Father.say(sub)传入的是father 的子类sub,我们称这种叫向上转型。
2.解释
上面这个图就是两个类的继承关系。
继承关系的本质是is-a的关系,因此sub其实是father的子类集合里面第一个,他其实也是father类型,sub具备father一切的特性,还有public的域和方法。因此,即便调用的时候是sub的引用,由于sub里面其实具有一个隐含的father对象,最后也是引用到father对象去,也就是调用father对象的doSomeThing方法。
3.为什么叫向上转型?
从上图也可以看见,我们最后调用的是father对象的方法,因此sub的转换类型是向上的。
注意:子类是父类的超类,子类比超类有更多的方法,在向上转型的过程中,会相应的丢失一定的方法。
4.再谈聚合与继承。
其实平常在编码的过程中,大部分时候只是用到聚合,很少用到继承,因为继承存在一定的风险,特别是不知道源代码的继承,因此,判断需不需要继承就变得很重要?
笔者总结了一句话,就是新类进行需不需要向上转型?如果不需要,那么就要考虑继承的问题了。
总结:这一章节简单讨论了一下向上转型的几个注意点。
这一章节就到这里,谢谢。
-----------------------------------
目录
1.例子
package com.ray.testobject; public class Sub extends Father { public static void main(String[] args) { Sub sub = new Sub(); Father.say(sub); } } class Father { public void doSomeThing() { System.out.println("doSomething"); } public static void say(Father father) { father.doSomeThing(); } }
上面的例子中,Father.say(sub)传入的是father 的子类sub,我们称这种叫向上转型。
2.解释
上面这个图就是两个类的继承关系。
继承关系的本质是is-a的关系,因此sub其实是father的子类集合里面第一个,他其实也是father类型,sub具备father一切的特性,还有public的域和方法。因此,即便调用的时候是sub的引用,由于sub里面其实具有一个隐含的father对象,最后也是引用到father对象去,也就是调用father对象的doSomeThing方法。
3.为什么叫向上转型?
从上图也可以看见,我们最后调用的是father对象的方法,因此sub的转换类型是向上的。
注意:子类是父类的超类,子类比超类有更多的方法,在向上转型的过程中,会相应的丢失一定的方法。
4.再谈聚合与继承。
其实平常在编码的过程中,大部分时候只是用到聚合,很少用到继承,因为继承存在一定的风险,特别是不知道源代码的继承,因此,判断需不需要继承就变得很重要?
笔者总结了一句话,就是新类进行需不需要向上转型?如果不需要,那么就要考虑继承的问题了。
总结:这一章节简单讨论了一下向上转型的几个注意点。
这一章节就到这里,谢谢。
-----------------------------------
目录
相关文章推荐
- SpringMVC拦截器(资源和权限管理)
- 顺便再写一个递归 复习一下前面学的知识
- java Servlet接口及应用
- Eclipse – SimpleTagSupport was not found on the Java Build Path
- JAVA设计模式(20) —<行为型>状态模式(State)
- Spring AOP进行日志记录
- eclipse快捷键
- 学习Spring .net (1)
- Eclipse自动刷新
- Eclipse 快捷键整理
- 超级简单的java WebService示例
- java文本写入
- Java反序输出的一些方法
- Java复习笔记—多线程
- 为什么在Java中不使用finalize()方法
- java线程中典型的生产者与消费者模式
- Spring notes 2
- SpringIDI_Setter方法
- Java变量作用域
- 运算符和自加和自减运算符