2012-05-10 38 views
28

爲什麼器具必須始終之後寫在類的聲明延伸。例如:爲什麼「擴展」,在類聲明之前「工具」

public class Register extends ActionSupport implements ModelDriven 

爲什麼不

public class Register implements ModelDriven extends ActionSupport 

是編譯時錯誤

+14

因爲這就是Java的原因。 –

+2

...因爲這是詞法分析器強制執行的方式嗎? – Makoto

+0

Sue Oracle for this =) – 4lex1v

回答

58

當Java編譯器將一個類轉換爲字節碼時,它必須首先查找父類。這是因爲類的底層實現是指向父類的字節碼 - 它包含相關的方法和字段。然後,它添加了指向子類功能代碼的指針 - 其中一些由「實現」關鍵字授權。

因爲父類必須是可編譯的,所以如果編譯器知道該類是什麼,則會更容易。此外,您只能擴展一個類,但實現任意數量的接口。如果extends關鍵字可以混合在任意數量的執行指令中,編譯時間就會增加。編譯器希望儘可能快地失敗以減少開發時間,所以這個選擇是合乎邏輯的。此外,它可以幫助你以同樣的理由清楚地瞭解班級。

+2

+1最後一個理智的答案。謝謝。 :) – weltraumpirat

+4

我盡我所能。畢竟,我們都在一起! –

+2

@NathanielFord,我們真的嗎?我一直非常錯誤。 – jn1kk

5

可能使編譯器的工作更容易。這只是一個慣例。能夠重新排列這些東西沒有任何優勢。

這就像問爲什麼Java函數不是按照public int (int a, int b)add{ return a+b; }這樣的預定義符號編寫的。

+0

'C'的東西。隨着代碼的閱讀不僅僅是書面冗長,還有其他好處。 –

+0

這不是一個約定。這是一個語法規則。您可以忽略的約定,規則由編譯器強制執行。 –