java的構造函數是一個非常重要的作用,首先java里的構造函數是可以重載的,而且因為也是可以繼承在父類的構造函數,所以在子類里,首先必然是調用父類的構造函數。可以看下面的兩個例子來對比:
public class Test{  public static void main(String args[])  {    B b = new B(100);  }}class A{  public A()  {    System.out.println("A without any parameter");  }  public A(int i)  {    System.out.println("A with a parameter");  }}class B extends A{  public B()  {    System.out.println("B without any parameter");  }  public B(int i)  {    System.out.println("B with a parameter");  }}這個例子最后輸出的是
A without any parameter
B with a parameter
可以看到首先調用的是父類的構造函數,然后再是調用自己的構造函數。但是因為這里的B類中的有參數的構造函數是沒有super父類,所以導致它只會執行父類的沒有參數的構造函數。如果要讓它執行有參數的父類的構造函數,那么就要這樣寫代碼:
public class Test{  public static void main(String args[])  {    B b = new B(100);  }}class A{  public A()  {    System.out.println("A without any parameter");  }  public A(int i)  {    System.out.println("A with a parameter");  }}class B extends A{  public B()  {    System.out.println("B without any parameter");  }  public B(int i)  {    super(i);        //這里就是繼承自父類的有參數的構造函數    System.out.println("B with a parameter");  }}所以最后輸出的是:
A with a parameter
B with a parameter
因此,派生類必須通過super來調用父類的含有參數的構造函數。以下再附一道題:
public class Test extends X{  Y y = new Y();  Test()  {    System.out.print("Z");  }  public static void main(String args[])  {    new Test();  }}class X{  Y b = new Y();  X()  {    System.out.print("X");  }}class Y{  Y()  {    System.out.print("Y");  }}輸出的結果是什么?
首先我們來分析這道題:
因為首先看這個main函數,這個main函數只有一句代碼: new Test();因為發現這個Test類是繼承自X,所以首先要構造X,那么就進行X類的運行 Y b = new Y(),然后我們可以看到輸出的Y,然后就是執行X類的構造函數,輸出X;接著就是構造Y,然后執行Test自己的構造函數,輸出Z,所以輸出結果是YXYZ。
以上這篇關于java中構造函數的一些知識詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。
新聞熱點
疑難解答