2012-05-10 18 views
28

क्यों लागू हमेशा के बाद लिखा होना चाहिए, उदाहरण के लिए वर्ग घोषणा में लागू होता है:क्यों "फैली" "औजार" के पहले आता है वर्ग घोषणा में

public class Register extends ActionSupport implements ModelDriven 

क्यों नहीं

public class Register implements ModelDriven extends ActionSupport 

एक संकलन समय त्रुटि

है
+14

क्योंकि जावा जावा है। –

+2

... क्योंकि इस तरह लेक्सर इसे जरूरी बनाता है? – Makoto

+0

इस के लिए मुकदमा ओरेकल =) – 4lex1v

उत्तर

58

जब जावा कंपाइलर कक्षा को बाइटकोड में बदल देता है, तो इसे पहले मूल वर्ग को देखना चाहिए। ऐसा इसलिए है क्योंकि कक्षाओं का अंतर्निहित कार्यान्वयन माता-पिता वर्ग के बाइटकोड को इंगित करना है - जिसमें प्रासंगिक विधियां और फ़ील्ड हैं। फिर यह पॉइंटर्स में बाल वर्ग कार्यों के कोड में जोड़ता है - जिनमें से कुछ 'उपकरण' कीवर्ड द्वारा अनिवार्य हैं।

क्योंकि अभिभावक वर्ग को संकलित करने योग्य होना चाहिए, इसलिए यह आसान है कि संकलक आगे बढ़ता है कि वह वर्ग क्या है। इसके अलावा, आप केवल एक वर्ग का विस्तार कर सकते हैं लेकिन किसी भी इंटरफेस को लागू कर सकते हैं। संकलन समय चढ़ता है यदि विस्तारित कीवर्ड को किसी भी संख्या में लागू निर्देशों के बीच अंतःस्थापित किया जा सकता है। कंपाइलर्स देव समय को कम करने के लिए यथासंभव तेज़ी से विफल होना चाहते हैं, इसलिए यह विकल्प तार्किक है। इसके अलावा, यह आपको उसी कारण से कक्षा के बारे में स्पष्ट रूप से सोचने में मदद करता है।

+2

+1 अंत में एक साईं उत्तर। धन्यवाद। :) – weltraumpirat

+4

मैं अपनी पूरी कोशिश करता हूं। आखिरकार, हम सब इस साथ में हैं! –

+2

@NathanielFord, क्या हम वास्तव में हैं? मैं पूरी तरह से गलत जानकारी दी गई है। – jn1kk

5

शायद कंपाइलर की नौकरी को आसान बनाने के लिए। यह सिर्फ एक सम्मेलन है। इन चीजों को पुनर्व्यवस्थित करने में सक्षम होने का कोई फायदा नहीं है।

यह पूछना है कि जावा फ़ंक्शन प्री-ऑर्डर नोटेशन में public int (int a, int b)add{ return a+b; } क्यों नहीं लिखा गया है।

+0

'सी' का कुछ। चूंकि लिखित शब्दकोष से अधिक कोड पढ़ा जाता है, इसका लाभ होता है। –

+0

यह एक सम्मेलन नहीं है। यह एक वाक्यविन्यास नियम है। सम्मेलन जिन्हें आप अनदेखा कर सकते हैं, नियम संकलक द्वारा लागू किए जाते हैं। –