信1605-3 于丁一 20163578
为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?
构造函数的主要作用是初始化,因为子类继承了父类,所以父类有的东西子类也有,所以在子类的构造方法运行之前必须调用父类的构造方法。不能反过来,因为子类继承父类所以要有个顺序来执行,先有父类再有子类,所以不能反过来。
- 请自行编写代码测试以下特性(动手动脑):
- 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
//信1605-3 于丁一 20163578
package super调用;
class Animal {
public int age=10;
public String name;
public void eat(){
System.out.println("有吃东西的能力");
}
public Animal(int age){
this.age=age;
System.out.println("构造方法执行了");
}
}
class Dog extends Animal{
public int age=20;
public void eat(){
System.out.println("狗有吃骨头的能力");
}
public Dog(int age){
super(age);
System.out.println("Dog构造方法执行了");
}
}
public class Test {
public static void main(String[] args){
Animal a=new Animal(10);
a.eat();
Dog b=new Dog(20);
b.eat();
}
结果截图:
- 运行以下测试代码
回答问题:
1. 左边的程序运行结果是什么?
2. 你如何解释会得到这样的输出?
3. 计算机是不会出错的,之所以得
到这样的运行结果也是有原因的,
那么从这些运行结果中,你能总
结出Java的哪些语法特性?
请务必动脑总结,然后修改或编写一些代码进行测试,验证自己的想法,最后再看 后面的PPT给出的结论
运行前的结果猜想:
100
200
200
201(错误)
201
实验结果截图:
解释:前两个结果就是正常输出,第三个将child复制给parent,因为parent是父类,child是子类。所以第四个单纯的parent.myValue++无法实现加一的目的,而第五个体现了parent是child的父类,所以最后结果加一。