2012-12-11 23 views
40

संभव डुप्लिकेट:
Abstract class in Javaअमूर्त वर्ग और अमूर्त विधियां क्या हैं?

मैं कई स्पष्टीकरण मिल गया, लेकिन अभी तक मुझे यह समझाया गया है कि क्या सार वर्गों और जावा में तरीके हैं नहीं पा रहा हूँ।

कुछ ने कहा कि इसे कार्यक्रम की सुरक्षा के साथ कुछ करना है, अन्य ने कहा कि ऐसा कुछ भी नहीं है।

डायटेल & से भी डायटेल की पुस्तक मुझे इसका उद्देश्य नहीं मिलता है। जब, हम इसका उपयोग क्यों करते हैं?

कृपया इसे समझाएं जैसे कि आप एक नौसिखिया पढ़ रहे हैं, मैं वास्तव में आपकी मदद की सराहना करता हूं।

+4

क्या आपने इसे पढ़ा? http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html – PeterMmm

+0

मुझे बस इतना मिला कि उन्हें तत्काल नहीं किया जा सकता है, मैं उनका पूरा उद्देश्य समझ नहीं पा रहा हूं। जब हमारे पास पहले से ही एक्सेस विनिर्देशक हैं तो हमें इसकी आवश्यकता क्यों है। –

+1

सार वर्ग डिजाइनरों को डेवलपर्स को आवश्यक mthods लागू करने के लिए मजबूर करने में मदद करता है। – Suranga

उत्तर

72

एक अमूर्त वर्ग एक कक्षा है जिसे तत्काल नहीं किया जा सकता है। अन्य वर्गों के विस्तार के लिए इसका एकमात्र उद्देश्य है।

सार विधियां अमूर्त वर्ग में विधियां हैं (सार घोषित की जानी चाहिए) जिसका अर्थ है कि विस्तारित कंक्रीट क्लास को उन्हें ओवरराइड करना चाहिए क्योंकि उनके पास कोई शरीर नहीं है।

एक सार वर्ग का मुख्य उद्देश्य यह है कि यदि आपके पास उप वर्गों में उपयोग करने के लिए सामान्य कोड है लेकिन अमूर्त वर्ग के अपने उदाहरण नहीं होने चाहिए।

आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: Abstract Methods and Classes

+4

कंक्रीट वर्ग को विस्तारित करना अमूर्त विधि को ओवरराइड करना चाहिए। – Suranga

+1

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

-2

ABSTRACT CLASSES AND ABSTARCT METHODS FULL DESCRIPTION GO THROUGH IT

सार विधि body.A अच्छी तरह से परिभाषित विधि सार घोषित नहीं किया जा सकता है।

एक वर्ग जिसमें अमूर्त विधि है, को सार के रूप में घोषित किया जाना चाहिए।

सार कक्षा को तत्काल नहीं किया जा सकता है।

1

एक सार वर्ग एक वर्ग है कि आप, से एक वस्तु नहीं बना सकते तो यह ज्यादातर से इनहेरिट के लिए प्रयोग किया जाता है।

एक सार विधि (यदि आप इसे में स्थिर तरीकों हो सकता है अगर मुझे यकीन है कि नहीं कर रहा हूँ) एक विधि है कि बाल वर्ग को ओवरराइड करना चाहिए, इसमें शरीर नहीं है, यह सार तत्व है और केवल सार वर्गों में वे विधियां हो सकती हैं।

0

अमूर्त कक्षाओं के साथ आप अन्य वर्गों के विस्तार के लिए किसी प्रकार का कंकाल प्राप्त कर सकते हैं।

आप उन्हें तत्काल नहीं कर सकते हैं लेकिन आप कुछ सामान्य कार्यान्वयन कर सकते हैं जिनका उपयोग आप उन्हें बढ़ाने वाले वर्गों में कर सकते हैं।

15

एक सार विधि कोई शरीर के साथ एक विधि हस्ताक्षर घोषणा है। उदाहरण के लिए:

public abstract class Shape { 
    . . . 

    public abstract double getArea(); 
    public abstract double getPerimeter(); 
} 

तरीकों getArea() और getPerimeter() सार हैं। क्योंकि Shape कक्षा में एक सार विधि है, यह को abstract घोषित किया जाना चाहिए। बिना किसी अमूर्त तरीकों के एक वर्ग को abstract घोषित किया जा सकता है।जब एक वर्ग सार है, इसका एक उदाहरण नहीं बनाया जा सकता है; कोई केवल (कंक्रीट) उप-वर्गों के उदाहरण बना सकता है। एक ठोस वर्ग एक वर्ग है जिसे अमूर्त घोषित नहीं किया जाता है (और इसलिए इसमें कोई सार तत्व नहीं है और सभी विरासत सार तत्वों को लागू करता है)। उदाहरण के लिए:

public class Circle extends Shape { 
    public double radius; 
    . . . 

    public double getArea() { 
     return Math.PI * radius * radius; 
    } 

    public double getPerimeter() { 
     return 2.0 * Math.PI * radius; 
    } 
} 

ऐसा करने के कई कारण हैं। एक ऐसा तरीका लिखना होगा जो सभी आकारों के लिए समान होगा लेकिन यह आकार-विशिष्ट व्यवहार पर निर्भर करता है जो Shape स्तर पर अज्ञात है। उदाहरण के लिए, एक विधि लिख सकते हैं:

public abstract class Shape { 
    . . . 

    public void printArea(PrintStream out) { 
     out.println("The area is " + getArea()); 
    } 
} 

वैसे, यह एक काल्पनिक उदाहरण है, लेकिन यह मूल विचार पता चलता है: अनिर्दिष्ट व्यवहार के मामले में ठोस व्यवहार परिभाषित करते हैं।

एक सार वर्ग रखने का एक अन्य कारण यह है कि आप आंशिक रूप से एक इंटरफेस को कार्यान्वित कर सकते हैं। किसी इंटरफ़ेस में घोषित सभी विधियों को इंटरफ़ेस लागू करने वाले किसी भी वर्ग द्वारा अमूर्त विधियों के रूप में विरासत में मिलाया जाता है। कभी-कभी आप कक्षा में एक इंटरफ़ेस का आंशिक कार्यान्वयन प्रदान करना चाहते हैं और विवरण को उप-वर्गों में छोड़ना चाहते हैं; आंशिक कार्यान्वयन अमूर्त घोषित किया जाना चाहिए।

+0

भले ही, उदाहरण ने मेरे लिए यह बहुत स्पष्ट किया। – Rockstar5645

0

एक बार जब आप जावा में अमूर्त साधन प्राप्त करते हैं, तो आप पूछेंगे: उन्होंने इसे क्यों रखा? जावा अमूर्त सामान के बिना काम कर सकता है, लेकिन यह एक निश्चित ओओ शैली या शब्दावली का हिस्सा बनता है। वास्तव में ऐसी परिस्थितियां मौजूद हैं जहां एक अमूर्त वर्ग या विधि कार्यक्रम लेखकों के इरादे को व्यक्त करने का एक शानदार तरीका है। अधिकांश जब आप एक ढांचा या पुस्तकालय प्रोग्रामिंग कर रहे हैं जिसका उपयोग दूसरों द्वारा किया जाएगा।

3

अमूर्त विधि शरीर नहीं है। एक अच्छी तरह से परिभाषित विधि को सार घोषित नहीं किया जा सकता है।

एक वर्ग जो सार विधि हैसार के रूप में घोषित किया जाना चाहिए।

सार कक्षा को तत्काल नहीं किया जा सकता है।

72

-Abstract class एक जो नहीं instantiated जा सकता है, अर्थात अपनेobjectनहीं बनाया जा सकता है।

-Abstract method इसकी परिभाषा बिना विधि की घोषणा कर रहे हैं।

- एक Non-abstract class कर सकते हैं केवल गैर-सार तरीकों की है।

- एक Abstract class कर सकते हैं दोनों गैर-सार के साथ ही सार तरीकों की है।

- अगरClass एक Abstract methodहै तो वर्ग भी सार होना चाहिए।

- एक Abstract methodबहुत पहले गैर-सार उप-वर्ग द्वारा लागू किया जाना चाहिए।

-Abstract classDesign patterns में किया जाता है उन व्यवहार बदल रहा है रहता है संपुटित।

+0

यह वास्तव में उपयोगी उत्तर है। – user10607

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