问题一:
为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?
构造函数主要用于为对象分配空间,进行初始化。
构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。
子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
问题二:
请自行编写代码测试以下特性:在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
1 class Base{ 2 3 protected double size; 4 5 public Base(){ 6 size=0; System.out.println("Base类无参构造"); 7 } 8 public Base(double s){ 9 size=s;System.out.println("Base类有参构造");10 }11 }12 13 public class Sub extends Base{14 15 private String color;16 17 public Sub(){18 19 color="blue";System.out.println("Sub类无参构造");20 21 }22 23 public Sub(String c){24 25 color=c;System.out.println("Sub类有参构造");26 27 }28 29 30 public Sub(double s,String c){31 32 super(s); //调用Base类中带一个参数的构造方法33 34 color=c;35 36 System.out.println("Sub类有参构造");37 }38 39 public static void main(String[] args){40 Sub s1=new Sub(); 41 Sub s2=new Sub("red");42 Sub s3=new Sub(0,"red");43 }44 }45 46 //要在子类中显式调用直接父类带参数的构造方法,可通过super()调用来实现。47 48