JAVA中的向上转型和向下转型

JAVA中的向上转型和向下转型

今天在看廖雪峰老师的《JAVA教程》时看到了java中的向上转型和向下转型,看完之后没有理解也不太明白,又陆续查询了一些资料来学习。后来看到两位博主写的很形象,容易理解,总结在这里,供大家参考,也供自己以后复盘理解。

向上转型

通俗地说就是子类转型成父类。例如动物类是父类,鸟类是子类。那么动物 a=new 鸟();就是一个向上转型,即鸟是动物,在现实生活中我们也经常这么说。还有一位博主解释的很形象,贴在下边。

在向上转型中,发现如果子类向上转型为父类,则会遗失掉父类中没有定义的方法,而除了private的属性外,其他的属性都会被父类的属性覆盖。例如:

当一个儿子长大成人娶妻生子之后,他便“向上转型”为一个父亲了,呵呵,他除了非常私有的(private)一些情况保持不变外,如姓名,老婆的名字等等外,其他的属性(public,protected,friendly)都成为一个标准的父亲应有的属性(被覆盖了),如对家庭的责任感,由做儿子时的“低”变为了父亲应有的“高”;自由的程度,由作儿子时的“高”变为了作父亲后的“低”等等类似的。而他作儿子时一些特有的(不属于父亲应有的或者说父类没有的)作为(方法)在其成为父亲后便被舍弃了,如恣意妄为,夜不归宿等等。而正常的行为,比如挣钱的方法,每个父亲肯定不尽相同,作son时的方法也就保存了下来(覆盖了父类的方法)。
————————————————
CSDN博主「CenturyMagus」
原文链接:https://blog.csdn.net/centurymagus/article/details/4476459

向下转型

我自己理解向下转型本质上就是先抽象,再具象。
这里贴一位博主的解释,我觉得写的特别好,供大家一起学习参考。

很多时候,我们需要把很多种类的实例对象,全部扔到一个集合。(这句话很重要)
在这个例子里就是把Thinkpad笔记本,Mouse鼠标,KeyBoard键盘等实例对象,全部扔到一个Shopcar购物车集合。
但是肯定不可能给他们每个种类都用一个独立的集合去存放吧,这个时候我们应该寻找到一个标准,接口就是一个标准。这些都是各种电子产品,抽象成电子产品。然后一个Electronics接口就出来了。
在回到刚才,我们把很多种类的实例对象全部扔到一个集合。或许这样比较好理解:把很多种类的子类实例对象全部扔到存放父类实例的集合。
经过了这个过程,子类实例已经赋值给了父类引用(即完成了向上转型),但很遗憾的丢失了子类扩展的方法。
很好的是Java语言有个向下转型的特性,让我们可以重新获得丢失的方法,即强转回子类
所以我们需要用到子类实例的时候,就从那个父类集合里拿出来向下转型就可以了,一样可以使用子类实例对象

————————————————
CSDN博主「yinhuanxu」
原文链接:https://blog.csdn.net/xyh269/article/details/52231944

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值