• 从头认识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.再谈聚合与继承。

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

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

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

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

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

    目录

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    面试可能遇到的关联式容器(map、set等)相关问题
    C++学习 STL组件之vector部分总结
    C++ 菱形虚拟继承 与 指针偏移问题
    C++ 关键字 explicit 的使用
    C++ sort()排序函数用法
    C++ 字符流 stringstream
    C/C++ 每日一题
    C/C++ 超长正整数相加
    C++ 二叉搜索树原理及其实现
    Tomcat安装
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4944458.html
Copyright © 2020-2023  润新知