从头认识java-6.5 向上转型

这一章节我们来讨论一下向上转型。

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.再谈聚合与继承。

其实平常在编码的过程中,大部分时候只是用到聚合,很少用到继承,因为继承存在一定的风险,特别是不知道源代码的继承,因此,判断需不需要继承就变得很重要?

笔者总结了一句话,就是新类进行需不需要向上转型?如果不需要,那么就要考虑继承的问题了。

 

总结:这一章节简单讨论了一下向上转型的几个注意点。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值