2010-08-12 22 views

उत्तर

17

में कक्षाओं को आयात और विस्तार करने के बीच क्या अंतर है, ये दो बहुत ही अलग चीजें हैं।

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

import java.util.Scanner 
// now you can use the Scanner class in your code like so: 
Scanner stdin = new Scanner(System.in); 
// instead of having to do 
java.util.Scanner stdin = new java.util.Scanner(System.in); 

कक्षा का विस्तार करना एक नई कक्षा बना रहा है जो किसी अन्य वर्ग का उप-वर्ग है। यह आपको उस कक्षा की कार्यक्षमता को जोड़ने या बदलने की अनुमति देगा जो आप विस्तार कर रहे हैं।

// this is a very contrived example 
public class EmptyList extends ArrayList { 
    @Override 
    public boolean add(Object o){ 
     return false; // will not add things to a list 
    } 
} 
+0

संकलित नहीं होगा, जोड़ना सच या गलत वापस करना है! –

+0

@ टिम, यह संकलित क्यों नहीं होगा? लापता वापसी मूल्य की वजह से? – jjnguy

+0

... बूओलान में टाइपो भी। –

3

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

आप OOP inheritance का उपयोग करना चाहते हैं, तो आप विस्तार एक वर्ग - जो कि अपने वर्ग सुपर क्लास + अपनी कक्षा में जो भी आपके लिखने की कार्यक्षमता है।

दो बातें नहीं बल्कि भिन्न हैं, इसलिए शायद आप कुछ सरल कार्यक्रमों बनाना चाहिए, और अपने आप के लिए स्पष्ट अंतर देखते हैं।

-3

आयात एक वैकल्पिक खंड घोषणा करते हैं कि कौन सी क्लास क्या आप में संभावित वर्ग इंटरफ़ेस या गणन प्रयोग करेंगे। विस्तार कक्षा में कहता है कि वह उस मूल वर्ग की कार्यक्षमता का उपयोग कर सकती है।

एक सार्वजनिक वर्ग आप इसे पहले आयात करने की आवश्यकता का विस्तार करने के लिए।

+0

यह लगभग पूरी तरह से गलत है। आप इसे आयात किए बिना कक्षा का विस्तार कर सकते हैं। आप इसे आयात किए बिना कक्षा का उपयोग कर सकते हैं, इसलिए आयात "इरादे की घोषणा" नहीं बनाते हैं। और विस्तार में पहुंच अधिकारों से परे कई विधियां हैं, केवल माता-पिता के वर्ग 'संरक्षित' सदस्यों को एक्सेस करने की अनुमति देता है, और किसी भी मामले में माता-पिता की 'सार्वजनिक' कार्यक्षमता का उपयोग करना आवश्यक नहीं है। –

+0

@Andrzej Doyle: हम कह सकते हैं कि कक्षा को विस्तार कुंजी शब्द का उपयोग न करना संभव है लेकिन इसमें पूरा पथ जोड़ें। आप "इरादे की घोषणा" के बारे में सच हैं। दूसरे शब्दों में यदि मैंने इस तरह के smtg लिखा है "एक वर्ग सार्वजनिक वर्ग का विस्तार करने के लिए आपको इसे आयात करना चाहिए या पूर्ण पथ का उपयोग करना चाहिए", यह मेरा दिमाग छोटा सा कट था। मैं होता हूं ;-)। –

3

आयात मतलब है कि आप एक गैर योग्य तरीके से संदर्भित कर सकते हैं कि। जैसे

import java.util.List; 

List list = ... 

रूप

java.util.List list = 

विस्तार करने का विरोध किया पूरी तरह से अलग है, और एक वर्ग

1


विस्तार एक मौजूदा की कार्यक्षमता बढ़ाने के साधन विस्तार से व्यवहार और संरचना विरासत में इसका मतलब है कक्षा।
आयात करने का मतलब कुछ एपीआई को आपकी कक्षा में सहायक के रूप में उपयोग करने के लिए उपयोग करना है।

4

आयात अपने कार्यक्रम में परिवर्तन नहीं होता, यह सिर्फ आप एक वर्ग की घोषणा का संक्षिप्त रूप में लिखने के लिए अनुमति देता है। अपनी कक्षा में आप जावा लाइब्रेरी के भीतर किसी भी पैकेज से किसी भी अन्य वर्ग का उपयोग कर सकते हैं।
आइए कहें कि आप कीबोर्ड से इनपुट लेने के लिए स्कैनर क्लास का उपयोग करना चाहते हैं। java.util.Scanner sc = new java.util.Scanner(System.in); लिखने के बजाय, आप बस Scanner sc = new Scanner(System.in); लिख सकते हैं।
आप पैकेज या एक पैकेज अपने वर्ग के शीर्ष है, जिस पर वर्ग नाम और उसके बाद आयात आयात करते हैं तो java.util.*; या मैं mport java.util.Scanner;

एक वर्ग का विस्तार एक वर्ग का आयात के रूप में सरल नहीं है। जब आप कक्षा का विस्तार करते हैं तो आप अपनी सभी कक्षाओं में विस्तारित वर्ग के सभी उदाहरण (फ़ील्ड) और विधियों को जोड़ रहे हैं।दूसरे शब्दों में, आपके पास विस्तारित वर्ग के सभी क्षेत्रों और विधियों तक पहुंच है।

+0

निजी नहीं है। (इस तरह का पुराना सवाल क्यों है कि पहले से ही एक अच्छा, स्वीकार्य उत्तर है?) –

1

सब से पहले, आयात सही वर्ग मुख्य अंतर को खोजने के लिए संकलक की क्षमता बढ़ाने के लिए उपयोग करते हैं, है आयात उपयोग एकत्रीकरण (है-एक) में अवधारणा & फैली उपयोग हम है (है-एक) संबंध
में ए-ए या आयात है, हमारी कक्षा का ओबीजी आयात वर्गों के साथ आजीवन संबंध बनाए रखता है, हमें विशेष कक्षा के ओबीजे प्राप्त करने की आवश्यकता है जिसे हम अपने आवेदन में उपयोग करना चाहते हैं, लेकिन हमारी कक्षा के ओबीजे को विस्तारित करना है माता-पिता वर्ग के साथ एक जीवन समय संबंध ... हैप्पी अगर मैं सही तरीके से सही उत्तर दे रहा हूं ....

1

एक वर्ग आयात करने से हम इसकी पूर्वनिर्धारित विधियों तक पहुंच सकते हैं। हम सीएन उन तरीकों को छोटा मत करो लेकिन हम उनका उपयोग कर सकते हैं। कक्षा का विस्तार करना मतलब है कि हम विरासत में प्राप्त कक्षा में परिभाषित विधियों को ओवरराइड कर सकते हैं।

0

पैकेज आयात क्लासलोडर को बताने का एक तरीका है जहां आप अपनी कक्षाओं को देखना चाहते हैं और समान नाम वाले वर्गों के बीच अंतर भी कर सकते हैं। कक्षा विस्तार आपके वर्गों के बीच जेवीएम को विरासत संबंध बताता है। क्लास मिलने के बाद ओओ नियम लागू होते हैं।

0

सरल में:

आयात को संदर्भित करता है एक संबंध नहीं है। कीवर्ड नया के साथ।

विस्तार संबंध है। कीवर्ड के साथ विस्तारित करता है।

कृपया अच्छे उदाहरण के लिए this लिंक देखें।

+0

लिंक मर चुका है ... –

+0

संपादित @KorayTugay :) – ram

संबंधित मुद्दे