zoukankan      html  css  js  c++  java
  • 在实践中理解把握复杂的知识

     以下是运行结果:

     我们来分析一下为何会有如下结果:

    首先

    Parent parent=new Parent();
    parent.printValue();
    Child child=new Child();
    child.printValue();

    分别输出父类和子类各自的myValue,100和200没有什么疑问。

    接着

    parent=child;
    parent.printValue();

    子类对象赋值给了父类对象父类对象的myValue,以及printValue函数被子类对象覆盖了所以是Child200

    parent.myValue++;
    parent.printValue();

    这时输出的是200可见maValue++中的myValue应该是父类中的。

    我们可以验证一下将子类的输出函数改为这样System.out.println("Child.printValue(),myValue="+myValue+" "+super.myValue);

    让子类在后面输出父类的myValue。

    以下是运行结果:

     101说明修改的是父类的。

    ((Child)parent).myValue++;
    parent.printValue();

    将父类强制转化为子类,所以修改的是子类的myValue输出了201。

    综上所述我们可以得到这样的结论:

    子类的同名方法和变量会覆盖父类的方法和变量;

    可将子类对象赋值给父类对象,但此时调用的函数是子类的函数,变量时父类的变量;

    可以将父类强制转化为子类,从而使用子类的变量。

  • 相关阅读:
    MFC 解析xml文件
    数字图像处理-----主成成分分析PCA
    C++设计模式——建造者模式
    总结的文章--未读
    八大排序算法
    C++读取、旋转和保存bmp图像文件编程实现
    数字图像处理-----直方图均衡化
    数字图像处理------中值滤波
    matlab图像基础知识
    MFC最大化显示任务栏
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/13853475.html
Copyright © 2011-2022 走看看