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关键字来访问它。

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