• 课堂(继承与多态)动手动脑


    01.怎样判断对象是否可以转换?

    答:可以使用instanceof运算符判断一个对象是否可以转换为指定的类型

    02. 现在有三个类:

    class Mammal{}

    class Dog extends Mammal {}

    class Cat extends Mammal{}

    针对每个类定义三个变量并进行初始化

             Mammal m=null ;

             Dog d=new Dog();

             Cat c=new Cat();

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

                      m=d;

                      d=m;

                      d=(Dog)m;

                      d=c;

                      c=(Cat)m;

    出现编译错误:第二行,原因:不能将父类变量赋值给子类变量。

                      第四行,原因:继承于同一个父类的两个平行子类不能互相赋值。

    出现运行错误:第五行,原因:在第一行中,m变量已经指向Dog对象,如果再执行c = (Cat)m,就是让c指向Dog对象,而Cat和Dog之间不存在继承关系,无法让c指向Dog对象。

    03.

    运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

                           

    通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

    04.

    运行以下测试代码

     

    .   左边的程序运行结果是什么?

    2.   你如何解释会得到这样的输出?

    3.   计算机是不会出错的,之所以得

                      到这样的运行结果也是有原因的,

                      那么从这些运行结果中,你能总

                      结出Java的哪些语法特性?

    答:

     

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

    如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

    如果子类被当作父类使用,则通过子类访问的字段是父类的!

  • 相关阅读:
    day_13
    day_12
    day_11
    day_10
    day_09
    day_08
    day_07
    day_06
    cmder 基本配置和使用
    php自动加载
  • 原文地址:https://www.cnblogs.com/mhj666/p/7816760.html
Copyright © 2020-2023  润新知