zoukankan      html  css  js  c++  java
  • 动手动脑(多态与继承)

    动手动脑 1

    在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

    源代码

    public class Test {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Son s=new Son();

    s.Cs();

    }

    }

    class Parent{

    void Cs(){

    System.out.println("父类方法");

    }

    }

    class Son extends Parent{

    void Cs(){

    super.Cs();

    System.out.println("子类方法");

    }

    }

    使用super调用父类同名方法。

     

    动手动脑 2

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

    m=d;

    d=m;

    d=(Dog)m;

    d=c;

    c=(Cat)m;

    以上代码中第二句,第四句和第五局不能通过编译

    原因

    (1)第二句是父类不能直接给子类赋值。像第三局根据类型转换可以完成赋值。

    (2)第四句是子类之间的赋值,不能完成。

    (3)第五句不能编译是因为此时的mdog类型,子类之间不能强制类型转换。假如没有执行第三局第五句将可以正常编译。

     

     

     

    动手动脑 3

    运行以下代码

     

     

     

    预测结果

    输出的值分别为

    100

    200

    200

    201

    201

    结果分析

    前三个结果没有问题,后边的结果分析如下

     

     

     经过对代码的修改

             parent.myValue++;

    System.out.println(parent.myValue);

    parent.printValue();

    ((Child)parent).myValue++;

    System.out.println(child.myValue);

    parent.printValue();

    输出结果为

    101  

    201

    所以可以看出parent.myValue++;是对parentmyValue进行加1  而前边已经将子类赋值给父类,所以执行输出的时候输出的是childmyValue的值。

    所以第四部分结果应该是200

    最后一部分将parent转化为child类型之后对myValue 的值修改是改的ChildmyValue的值,最后输出的同样是child的值,所以结果为201

     

  • 相关阅读:
    从验证谈起
    今天感触
    弱点
    经济平衡一些看法
    关于灵魂
    关于博弈论中的一硬币正反问题的分析<二>
    java8新特性:对map集合排序
    junit单元测试不通过报documentationPluginsBootstrapper相关异常
    Maven打包报错:[WARNING] The POM for xxx is missing, no dependency inform
    理解maven命令package、install、deploy的联系与区别
  • 原文地址:https://www.cnblogs.com/wys-373/p/7812788.html
Copyright © 2011-2022 走看看