java中構造方法過載和繼承
阿新 • • 發佈:2019-01-03
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();
}
}
輸出結果為:
這是一個帶引數的構造方法
這是一個不帶引數的構造方法
- 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();
}
}
輸出結果為:
呼叫了父類有引數的構造方法
子類的無引數構造方法