嗨,我是Ankur,現在已經用java編碼了幾年了..我已經閱讀過Hermann Schildt的第一個Java完整參考文獻,前面和最近我遇到了Oracle docs這個頁面中的一個主要謬論。註釋部分說If構造函數不會顯式調用超類的構造函數,Java編譯器會自動插入對超類的無參構造函數的調用。如果超類沒有沒有參數的構造函數,那麼你會得到一個編譯時錯誤。對象確實有這樣的構造函數,所以如果Object是唯一的超類,那就沒有問題了。但是,如果我明確地沒有提到超類中的默認構造函數,我仍然沒有得到一個錯誤!我從來沒有在任何一本書中發現過這樣的信息!!事實上,我可以很容易地運行一個展示構造函數鏈的程序,而不提供默認超類的構造函數!下面是代碼:我不明白Oracle文檔中的這部分內容嗎?
import java.io.*;
import java.util.*;
class student
{
// student()
//{
//System.out.println("I am student\n");
// }
public void subjects()
{
System.out.println("English..");
}
}
class engineering extends student
{
engineering()
{
System.out.println("I am an engineer..\n");
}
public void subjects()
{
System.out.println("Maths");
}
}
class computer extends engineering
{
computer()
{
System.out.println("I am a computer engineer.");
}
public void subjects()
{
System.out.println("Computer");
}
}
class test8
{
public static void main(String args[])
{
computer cs=new computer();
}
}
在上面的代碼,如果我與代碼的註釋塊運行它,構造鏈發生normally.First學生()構造運行,則工程(),然後計算機() ..但是,當我刪除基類student()的默認構造函數,它仍然運行成功..不是在Oracle文檔中的參數,在構造函數鏈中必須提供超類中的默認構造函數錯誤或是我的理解在oracle文檔中的這個部分是錯誤的?請幫助我解決這個問題! 謝謝!
請正確縮進並使用Java命名約定,類名以大寫字母開頭。 –
你會在這個[SO帖子]中得到答案(http://stackoverflow.com/a/14250503/2982225) –