子类与父类构造方法的问题

今天。在看马士兵的教学视频里面,隐隐约约懂得子类构造方法是要调用方法。是不是如果没有显示调用父类的构造方法系统就会自动把父类的无参构建方法给你放在子类构建的第一行。 是不是子类的构造方法都必须每一个中第一行对父类的进行调用?如果父类没有无参构造方法或没有有参构造方法,或两者都没有,其子类在构造方法的时候,怎么办呢? 
下面是学习时的一些代码,自己弄了下:如果父类只有无参、即使子类里面没有调用,系统也会自动加在子类构造方法的第一行。
心得:父类构造方法中:有“有参”无“无参”构造方法,子类不调“有参”,编译错误;
      父类构造方法中:无“有参”有“无参”构造方法,子类不调“无参”,默加通过;
      父类构造方法中:无“有参”无“无参”构造方法,子类其实会调用系统给父类的默认构造方法,然后被子类调用。

以上都是自己的见解,如有错误或不足,希能指出。

package com.gdut.liuyanming;
class SuperClass{
private int n;

SuperClass(){
System.out.println("SuperClass()");
}

SuperClass(int n){
System.out.println("SuperClass("+ n +")");
this.n = n;
}
}

class SubClass extends SuperClass{
private int n;

SubClass(int n){
//如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参的构造方法。其实这里是有super();
System.out.println("SubClass("+ n +")");
this.n = n;
}

SubClass(){
super(300);//如果使用super,必须写在子类构造方法的第一行。
System.out.println("SubClass()");
}
}

public class TestSuperSub {

/** 如果子类构造方法中既没有显式调用基类构造方法,而基类中有没有无参的构造方法,则编译出错。
* 子类的构造过程中必须调用其基类的构造方法。(子类第二个方法就调用了,因为第一个方法super()被默认。)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}

}

猜你喜欢

转载自775121986.iteye.com/blog/1839050
今日推荐