关于子类调用父类构造方法的研究
1 public class Test 2 { 3 4 public static void main(String args[]) 5 { 6 new SonClass(); 7 } 8 } 9 class FatherClass 10 { 11 FatherClass()//父类的构造方法 12 { 13 System.out.println("This is Father Class."); 14 } 15 } 16 class SonClass extends FatherClass 17 { //子类会先调用父类的构造方法 18 SonClass() 19 { 20 System.out.println("This is Son Class."); 21 } 22 } 23 /* 24 * 输出结果为: 25 * This is Father Class. 26 * This is Son Class. 27 */
1 public class Test 2 { 3 4 public static void main(String args[]) 5 { 6 new SonClass(); 7 } 8 } 9 class FatherClass 10 { 11 FatherClass()//父类的构造方法 12 { 13 System.out.println("This is Father Class."); 14 } 15 FatherClass(int para)//父类带参数的构造方法 16 { 17 System.out.println("This is Father Class with parameter."); 18 } 19 } 20 class SonClass extends FatherClass 21 { //子类会先调用父类的无参构造方法 22 SonClass() 23 { 24 System.out.println("This is Son Class."); 25 } 26 } 27 /* 28 * 子类会调用父类的无参构造方法 29 * 输出结果为: 30 * This is Father Class. 31 * This is Son Class. 32 */
如果父类没有无参构造方法,而子类的构造不显示调用父类的带参数的构造方法super(para),则程序不能运行。
1 public class Test 2 { 3 4 public static void main(String args[]) 5 { 6 new SonClass(); 7 } 8 } 9 class FatherClass 10 { 11 //FatherClass()//父类的构造方法 12 //{ 13 // System.out.println("This is Father Class."); 14 //} 15 FatherClass(int para)//父类带参数的构造方法 16 { 17 System.out.println("This is Father Class with parameter:" + para); 18 } 19 } 20 class SonClass extends FatherClass 21 { //子类会先调用父类的无参构造方法 22 int para = 0; 23 SonClass()//此处出现错误 24 { 25 //super(2); 26 System.out.println("This is Son Class."); 27 } 28 }
在子类中调用父类的带参数的构造方法:
1 public class Test 2 { 3 4 public static void main(String args[]) 5 { 6 new SonClass(); 7 } 8 } 9 class FatherClass 10 { 11 //FatherClass()//父类的构造方法 12 //{ 13 // System.out.println("This is Father Class."); 14 //} 15 FatherClass(int para)//父类带参数的构造方法 16 { 17 System.out.println("This is Father Class with parameter:" + para); 18 } 19 } 20 class SonClass extends FatherClass 21 { //子类会先调用父类的无参构造方法 22 int para = 0; 23 SonClass()// 24 { 25 super(2);//调用父类带参数的构造方法,如果把参数2换成para会出现错误,但是当 para 用 static修饰时是可以的, 26 //是不是因为在用类建立一个对象之前para是不存在的,但是如果 para 为static时,para在类中是存在的。 27 System.out.println("This is Son Class."); 28 } 29 } 30 /* 31 * 子类会调用父类的无参构造方法 32 * 输出结果为: 33 * This is Father Class with parameter:2 34 * This is Son Class. 35 */