问题1:

继承条件下的构造方法调用?

通过super语句调用父类方法super()或super(参数)但父类构造方法必须在子类构造方法中是第一个语句。

问题2:

为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

构造方法的主要作用是初始化,在创造子类之前,我们必须先初始化父类,才能创造子类,再进行子类的初始化。这就要求先进行父类的构造函数,之后是子类的构造函数。

问题3:

java 继承多态接口练习题 java继承与多态题库_字段

注意最后一句,一个字串和一个对象“相加”,得到以下结果:

java 继承多态接口练习题 java继承与多态题库_字段_02

为什么?

在“+”运算中,当任何一个对象与一个String对象连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

问题4:

现在有三个类:

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;

答:1.正确,子类可以直接给父类赋值

2.不正确,父类必须通过强制转换给子类赋值

3.正确

4. 不正确,dog类与cat类无联系。

5.不正确,m变量在第一句已经转换为dog类,dog类与cat类无关联,无法转换

问题5:

java 继承多态接口练习题 java继承与多态题库_字段_03

java 继承多态接口练习题 java继承与多态题库_父类_04

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

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

3. 计算机是不会出错的,之所以得 到这样的运行结果也是有原因的, 那么从这些运行结果中,你能总 结出Java的哪些语法特性?

答:

1运行结果:

Parent.printValue(),myValue=100

Child.printValue(),myValue=200

Child.printValue(),myValue=200

Child.printValue(),myValue=200

Child.printValue(),myValue=201

2.原因:

首先第一次输出输出parent类的value值,第二次输出child类value值,之后进行覆盖,此时parent的类型已经是child类了,再次输出为child的200。

之后进行了加一操作,但没起作用,这是因为parent已经是child类变量,无法通过原来parent的方法实现自增,只能转换为child类进行自增。

3.特性:

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

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