关于向上转型与向下转型的一点个人见解

正是大四实习期间,看李兴华老师的Java教学视频再打打基础时,就遇见向上转型与向下转型的问题,向上转型倒是通过视频看懂了,向下转型那一段看了好多遍都没懂,上网查资料,也大多一语带过,最后看了《Java编程思想》才稍明白了,好了,废话少说。
向下转型?这让我想到了作为Java的三大基本思想之一的多态(父类引用指向子类对象),这就是一种向上转型。 那么什么是多态呢?我习惯于从生物学的角度去理解它,即物种的多样性,多态对于我来说就是”同一物种不同个体在同一行为上的不同表现”,就比如两个人,他们都是人,但属于不同个体,他们都爱运动,但一个打篮球,一个喜欢跑步。(本段文字纯属废话,当然决定在于读者自己)
好了,言归正传。例:Animal cat=new cat();这句代码前面声明了一个父类对象(这相当于一个名字),后面却在堆空间里产生了一个子类对象,这句话翻译成中文就是“猫是动物”,嗯,逻辑没问题,反过来,动物是猫,呃??那狗是动物吗??这就必须强制类型转换了,当然这说的是向下转型,下面再说。
向上转型有什么用?转型之后,因为操作的是父类对象,所以是无法找到在子类中定义的新方法,最后对象中所得只有继承和重写的方法。 向下转型:如果两个没有关系的对象之间发生了转换关系,则肯定出现异常,所以上下转型的关系的发生则必须有继承关系。真的好了,我也真的不啰嗦的,我自己还得看视频,敲代码。

*总结:向上转型获得的是继承和重写的子类方法,向下转型获得的是子类扩展的方法。因为要强制性类型转换,所以向下转型之前最好用instanceof();判断一下。*(关键点)** ———————————————————————— 为了方便记忆我为大家画了个图,以区分上下转型的权限范围关系:

关于向上转型与向下转型的一点个人见解_第1张图片

    在下第一次写博客,多有疏漏,望大家海涵!! 话不在多,而贵于精,这是本人的一点领悟,也希望大家有所收获! 就这样吧,再会!!!

2017/2/24

以上是之前写的东西,今故地重临,还是发现一些谬误,也不重新改过了,出错了也希望被看到错在哪里,有的时候犯错更能加深领悟。
上图中,向上转型没错,向上转型之后,如Animal an=new cat();
an对象只能调用从父类中继承或是覆写的方法,至于其自己扩展的方法,则处于undefined状态。
而图中向下转型的标识则是错的。如Animal an=new cat();cat ming=(cat)an;

如代码所示,要想向下转型,则必须先向上转型,否则会报错的。而向下转型之后,之前向上转型之后失去的方法则全部找回。

最后,使用向上转型与向上转型有啥好处呢?
我的一点点理解哈,可以简化代码,节省内存。唉,再写下去,又是一篇博客,我也不写了。其实写了,估计观众们也不爱看,所以把大致的原理、重点说一下就算完事了。作为一个程序员,其实最重要的还是要自己敲代码,先了解了个知识的大概,然后就要练手了,到代码中去找自己的道。

你可能感兴趣的:(对向上向下转型的一点)