2013-02-21 16 views
5

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

तो वर्ग विरासत में इसका इस्तेमाल करने की कोशिश:

public class Inheritance { 
double width; 
double height; 
double depth; 
Inheritance (Inheritance object){ 
    width = object.width; 
    height = object.height; 
    depth = object.depth; 
} 
Inheritance (double w, double h, double d){ 
    width = w; 
    height = h; 
    depth = d; 
} 
Inheritance(){ 
    width = -1; 
    height = -1; 
    depth = -1; 
} 
Inheritance (double len){ 
    width=height=depth=len; 
} 
double volumeBox(){ 
    return width*height*depth; 
} 
class BoxWeight extends Inheritance { 
    double weight; 
    BoxWeight (double w, double h, double d, double m){ 
     super(w,h,d); 
     weight = m; 
    } 
} 

, जब मैं मुख्य वर्ग में BoxWeight इस्तेमाल करने की कोशिश लेकिन , उपयोग के दौरान मुझे एक त्रुटि मिली

public class MainModule { 
    public static void main(String[] args) { 
    Inheritance.BoxWeight mybox1 = new Inheritance.BoxWeight(9, 9, 9, 9); 
.... 

त्रुटि - विरासत का कोई भी संलग्न उदाहरण उपलब्ध नहीं है। जहां मैं गलत हूं?

+1

विरासत। बॉक्सवेइट mybox1 = नया विरासत()। नया बॉक्सवेइट (9, 9, 9, 9); –

+0

@ArsenAlexanyan यह एक संभावित समाधान है। जवाब देने के लिए यह बहुत अच्छा होगा ** क्यों ** वह कोड काम करता है। –

उत्तर

4

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

BoxWeightInheritance कक्षा के अंदर होने की आवश्यकता नहीं है।

इसके बजाय, Inheritance कक्षा से BoxWeight हटा दें।

और Inheritance.BoxWeight से BoxWeight बदलें।

संपादित करें: बस पूर्णता के लिए, आप भी यह कर सकता है:

Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(...); 

Inheritance.BoxWeight, बस प्रकार है तो ऊपर लागू नहीं होता। लेकिन BoxWeight का उदाहरण बनाने के लिए, आपको Inheritance ऑब्जेक्ट की आवश्यकता है, जिसे आप new Inheritance() के साथ बनाते हैं।

+0

क्लास बॉक्सवेइट को बाहर निकालने का प्रयास करें - जैसा कि आपने पुनः दावा किया - अब यह ठीक है – gbk

3

बदलें

class BoxWeight extends Inheritance 

को
static class BoxWeight extends Inheritance 

यह आपके कोड को संकलित करने के लिए अनुमति चाहिए। हालांकि, जावा की विरासत सुविधा का उपयोग करने के अलावा, आप एक आंतरिक कक्षा का भी उपयोग कर रहे हैं, जो इस मामले में वास्तव में आवश्यक नहीं है और आपके लिए चीजों को भ्रमित करने की संभावना है। यदि आप BoxWeight अपनी फ़ाइल में खींचते हैं, और इसे Inheritance. उपसर्ग के बिना संदर्भित करते हैं, तो मुझे लगता है कि आपको समझने में आसान चीज़ें मिलेंगी।

+0

'विरासत' कक्षा परिभाषा के बाहर 'बॉक्सवेइट' कक्षा को स्थानांतरित करना बेहतर होगा –

+0

@ लुइगी मैन्डोज़ा: सहमत। मैं अभी भी उस प्रभाव के लिए कुछ लिख रहा था क्योंकि आपकी टिप्पणी आई थी ... – Asaph

+0

'स्थिर वर्ग बॉक्सवेइट 1 विरासत बढ़ाता है' और अब यह ठीक है – gbk

-1

समस्या इस पंक्ति में है

Inheritance.BoxWeight mybox1 = new Inheritance.BoxWeight(9, 9, 9, 9); 

उपयोग

BoxWeight mybox1 = new BoxWeight(9.0, 9.0, 9.0, 9.0); 
+1

कोशिश करें - नई त्रुटि प्राप्त करें - 'बॉक्सवेइट को किसी प्रकार के लिए हल नहीं किया जा सकता है' 'उपयोगी' बॉक्स बॉक्स के लिए 'स्थिर' जोड़ें, जैसा कि Asaph – gbk

+1

द्वारा अनुशंसित किया गया है यह संकलित भी नहीं होगा। अगली बार ** परीक्षण ** आपका कोड। –

0

तथ्य यह है कि इस पागल नाम के साथ एक पूरी तरह से मनमाने ढंग से होमवर्क समस्या है, कि अमूर्त वर्ग के भीतर एक वर्ग का विस्तार एक अजीब स्थिति है और यह कोई मतलब नहीं है कि एक BoxWeight एक Inheritance अंदर होने के लिए की उपेक्षा:

... 
    Inheritance i = new Inheritance(0, 0, 0, 0); 
    Inheritance.BoxWeight mybox1 = i.new BoxWeight(9, 9, 9, 9); 
    ... 

i 'संलग्न वस्तु' है।

1

आप अपनी कक्षाओं नेस्ट और स्थिर नहीं रखने के लिए (मैं इसके लिए एक अच्छा कारण नहीं दिख रहा है) चाहते हैं, आप भी उपयोग कर सकते हैं:

Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(9, 9, 9, 9); 
1
Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(9, 9, 9, 9); 

आप यहाँ दोनों सिद्धांतों विरासत का उपयोग कर रहे और आंतरिक वर्ग। मान लें कि आपकी कक्षा BoxWeightInheritance class का विस्तार नहीं करती है। आपकी आंतरिक कक्षा में बाहरी वर्ग की कुछ संपत्तियों और विधियों का उपयोग होता है जो ऑब्जेक्ट इंस्टेंस लेवल विशेषताएँ हैं। इसलिए आपको new Inheritance() बनाना चाहिए, फिर इस उदाहरण का उपयोग करके BoxWeight का उदाहरण बनाएं।

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