2012-05-10 14 views
28

Perché attrezzi devono sempre essere scritti dopo estende nella dichiarazione di classe, ad esempio:Perché "si estende" precede "attrezzi" in dichiarazione di classe

public class Register extends ActionSupport implements ModelDriven 

Perché non

public class Register implements ModelDriven extends ActionSupport 

è un errore in fase di compilazione

+14

Perché è così che è Java. –

+2

... perché è così che il lexer lo impone? – Makoto

+0

Sue Oracle per questo =) – 4lex1v

risposta

58

Quando il compilatore Java trasforma una classe in codice byte, deve prima cercare in una classe padre. Questo perché l'implementazione sottostante delle classi punta al bytecode della classe genitore, che contiene i metodi e i campi rilevanti. Quindi aggiunge i puntatori al codice delle funzioni di classe figlio, alcune delle quali sono dettate dalla parola chiave "implements".

Poiché la classe genitore deve essere compilabile, è più facile se il compilatore sa bene cosa sia quella classe. Inoltre, è possibile estendere solo una classe, ma implementare un numero qualsiasi di interfacce. Il tempo di compilazione sale se la parola chiave extends può essere mescolata tra un numero qualsiasi di istruzioni di attrezzi. I compilatori vogliono fallire il più velocemente possibile per ridurre il tempo di sviluppo, quindi questa scelta è logica. Inoltre, ti aiuta a pensare chiaramente alla classe per lo stesso motivo.

+2

+1 Finalmente una risposta sana. Grazie. :) – weltraumpirat

+4

Faccio del mio meglio. Dopotutto, siamo tutti insieme! –

+2

@NathanielFord, siamo davvero? Sono stato grossolanamente disinformato. – jn1kk

5

Probabilmente per semplificare il lavoro del compilatore. È solo una convenzione. Non c'è alcun vantaggio nell'essere in grado di riorganizzare queste cose.

È come chiedere perché le funzioni Java non sono scritte in notazione di pre-ordine come public int (int a, int b)add{ return a+b; }.

+0

Qualcosa di 'C'. Come il codice viene letto più di quanto la verbosità scritta abbia dei benefici. –

+0

Non è una convenzione. È una regola di sintassi. Convenzioni che puoi ignorare, le regole sono applicate dal compilatore. –