zoukankan      html  css  js  c++  java
  • 06-继承与多态课后动手动脑

    一.

    运行以下测试代码:

    运行结果:

    原因分析:

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象决定。对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。(数据变量不参与多态运算)

    在第三个输出语句中,对象是Child类型,所以调用的是child的方法,所以输出200;第四个输出语句,parent的myValue自增,但是变量不进行多态,所以还是调用的child的方法,输出200;第五个输出语句parent被强制转化为Child类型,也就是对Child的myValue进行自增运算,所以输出值是201。

    二.

    下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

    m=d;

    d=m;

    d=(Dog)m;

    d=c;

    c=(Cat)m;

    第二句和第四句会报错

    原因:

    子类对象不能直接赋值给父类变量,需要进行强制转换。

     m=d是可以的,表示定义了一个Mammal类型的引用,指向新建的 Dog类 型的对象,即父类的引用指向了自己的子类的对象。由于 Dog是继承自它的父类Mammal,所以Mammal类型的引用是可以指向Cat类型的对象的。。但是d=m不行,因为不能把父类对象引用赋给子类对象引用变量,除非进行强制转化,也就是向下转型(父类转子类)d=(Dog)m。

     d=c也会引起编译错误,父类型的引用必须指向子类的对象,即指向谁才能转换成谁,则因为父类引用指向的是Cat类的对象,而要强制转换成Dog类,这是不可能的,子类之间不能转换。

  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/mqlblog/p/7804173.html
Copyright © 2011-2022 走看看