问题一:
为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?
构造函数主要用于为对象分配空间,进行初始化。
构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。
子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
问题二:
请自行编写代码测试以下特性:在子类中,若要调用父类中被覆盖的方法,可以使用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