1. 程式人生 > >java中構造方法過載和繼承

java中構造方法過載和繼承

  1. java中同一個類同的構造方法怎麼呼叫另一個構造方法呢?

    如果一個類中有多個構造方法,在一個構造方法中想要呼叫另一個構造方法,需要用到this(引數)這樣的方式,且這行語句必須寫在構造方法的第一行。

public class B {
    public B() {
        /**
         * 這裡的this(字串)就是呼叫符合引數要求的構造方法
         * 這個this(字串)語句只能寫在這個構造方法的第一行
         * 否則會造成編譯錯誤。
         */
        this("呼叫帶引數的構造方法");
        System.out.println("這是一個不帶引數的構造方法"
); } public B(String s) { System.out.println("這是一個帶引數的構造方法"); } public static void main(String[] args) { B b = new B(); } }

輸出結果為:

這是一個帶引數的構造方法
這是一個不帶引數的構造方法
  1. java中的繼承
    java中子類繼承父類,在建立子類的物件時,其實預設是先呼叫父類的無引數的構造方法,建立父類物件,然後再建立子類物件,子類物件和父類物件時是挨著存放的,因此,子類物件可以使用父類的方法和全域性變數。
class Parent{
    public Parent() {
        System.out.println("呼叫了父類的無引數構造方法");
    }
    public Parent(String inforamtion) {
        System.out.println("呼叫了父類有引數的構造方法");
    }

}
public class Child extends Parent  {
    public Child() {
        System.out.println("子類的無引數構造方法");
    }
    public
static void main(String[] args){ Child child = new Child(); } }

其輸出結果為

呼叫了父類的無引數構造方法
子類的無引數構造方法

現在我們把父類中無引數的構造方法註釋掉,再次呼叫可以發現出現了編譯錯誤。因為子類會預設呼叫父類的無引數的構造方法來生成父類物件,而我們把父類中的無引數構造方法註釋掉後,子類就找不到了,因此出錯。我們可以為子類指定父類中帶引數的構造方法。

class Parent{
    /*public Parent() {
        System.out.println("呼叫了父類的無引數構造方法");
    }*/
    public Parent(String inforamtion) {
        System.out.println("呼叫了父類有引數的構造方法");
    }

}
public class Child extends Parent  {
    public Child() {
        /**
         * super(引數)這句是呼叫父類的有引數的構造方法,其中super必須寫在第一行
         * 否則出錯,因為是先生成父類物件,再生成子類物件。在這裡的super表示的是父類的
         * 應用。
         */
        super("呼叫父類中有引數的構造器,且引數型別為字串");
        System.out.println("子類的無引數構造方法");
    }
    public static void main(String[] args){
        Child child = new Child();

    }

}

輸出結果為:

呼叫了父類有引數的構造方法
子類的無引數構造方法