java中只要調用子類的構造函數就要調用父類無參數的構造函數嗎?若父類中不存在無參數構造函數會出錯嗎?


在回答這個問題之前,我們可以先來看下面一段代碼(父類里面有參數的構造方法方法體省略):

class Pen {
      public Pen(){}
      public Pen(String newColor , double newLength , double newPrice ){
       .............................;
       .............................;
     }
}
class Pencile extends Pen{
    public   static int count =0;
     public Pencile(){
       count ++;
     }
     public int GetCount(){
      return count ;
     }
public class Test {
      public static void main(String[] args ){
      Pencile A = new Pencile();
      Pencile B = new Pencile();
      System. out .println( "共創建了" + A .GetCount()+ "個實例!" );
  }
}
       這段代碼的結果應該是:共創建了2個實例!,這個結果是不難想象的,但是如果這段代碼我們把“public Pen(){}”這段無參的構造函數注釋掉的話,那么這個程序就會出現問題了。但是如果我們不但注釋掉“public Pen(){}”,同樣的我們也注釋掉“ public Pen(String newColor,  double newLength,  double newPrice){}”這樣的有參數的構造函數,那么這個程序又能執行了,而且輸出同樣的結果。為什么會出現這樣的問題呢?這就自然引出了我們以下的這個問題:
      java 中只要調用子類的構造函數就要調用父類無參數的構造函數嗎?若父類中不存在無參數構造函數會出錯嗎?
    答:Java中只要調用子類的構造函數就一定會調用父類的構造函數,這是毋庸置疑的!有時我們並沒有在父類中寫有參和無參的構造方法,但是這樣我們在定義子類對象時調用子類構造函數時,其實也調用父類的構造函數,這是系統自動為我們添加的“public Pen(){}”。但是如果我們在父類中已經自己定義了有參的構造方法,卻沒有定義無參的構造方法,那么此時系統是不會為我們自動添加無參的構造方法的,此時程序結果就會提醒你父類沒有無參的構造方法,程序就會報錯。
      以上是一個java初學者對目前自己寫程序的一點小的總結,希望大家能多多給點意見,參與討論!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM