दिलचस्प पोस्ट
मैटलैब में 'पकड़' के बराबर पायथन तो क्या एसक्यूएल संग्रह में सुरक्षित रूप से अनूठा_पीटीआर इस्तेमाल किया जा सकता है? JQuery में HTML दस्तावेज़ का हिस्सा निकालें प्रपत्र लोड होने पर कॉम्बो बॉक्स की चुने गए इन्स्टैक्स परिवर्तित ईवेंट को फायरिंग से रोकें कैसे एक नई विंडो खोलने और jQuery में jQuery का उपयोग कर इसे सम्मिलित करें? समारोह हस्ताक्षर का वापसी प्रकार हिस्सा है? एक CSS3 एनीमेशन के अंत में अंतिम स्थिति को बनाए रखना मैं जावा में कैसे लावा एम्बेड कर सकता हूँ? एंड्रॉइड में टाइमर कैसे सेट करें आप पीएचपी में एक छवि को काले और सफेद कैसे रूपांतरित कर सकते हैं क्या मैं एक सीएसएस चयनकर्ता को कोई विशिष्ट वर्ग नहीं होने वाले तत्वों का चयन कर सकता हूं? निष्पादन योग्य फ़ाइलों के लिए स्वचालित रूप से "git update-index -chmod + x" लागू करें कंस्ट्रक्टर में यह अजीब कोलोन-सदस्य (":") वाक्यविन्यास क्या है? कैसे एक WPF नियंत्रण का एक स्क्रीनशॉट लेने के लिए? नहीं 'एक्सेस-कंट्रोल-अनुमति-मूल' – नोड / अपाचे पोर्ट इश्यू

सुपर क्लास से उपवर्ग विधि को कॉल करना

मैं एक परिचयात्मक जावा पाठ्यक्रम में हूँ और हम सिर्फ विरासत के बारे में सीखना शुरू कर दिया है। मैं एक ऐसे कार्य पर काम कर रहा हूं जो पूछता है कि हम नाम और उम्र के साथ "पेट" सुपरक्लास बनाते हैं; और तीन उपवर्ग, प्रत्येक अपने स्वयं के अद्वितीय गुण (मैंने "कुत्ते", "बिल्ली" और "बर्ड" को चुना है) के साथ। हमारे पास इन सभी का निर्माण होने के बाद, हम सब कुछ जांचने के लिए एक मुख्य वर्ग बनाना चाहते हैं, और यह वह जगह है जहां मैं समस्याओं में चल रहा हूं। मैं Main भीतर इन अद्वितीय गुणों के लिए get जुलते तरीकों को कॉल करने का प्रयास कर रहा हूं, लेकिन ऐसा लगता है कि वे केवल उन तरीकों को खोजते हैं जो सुपर क्लास में हैं

यहां मुख्य वर्ग है:

 public class Kennel { public static void main(String[] args) { // Create the pet objects Pet cat = new Cat("Feline", 12, "Orange"); Pet dog = new Dog("Spot", 14, "Dalmation"); Pet bird = new Bird("Feathers", 56, 12); // Print out the status of the animals System.out.println("I have a cat named " + cat.getName() + ". He is " + cat.getAge() + " years old." + " He is " + cat.getColor() + "When he speaks he says " + cat.speak()); System.out.println("I also have a dog named " + dog.getName() + ". He is " + dog.getAge() + " years old." + " He is a " + dog.getBreed() + " When he speaks he says " + dog.speak()); System.out.println("And Finally I have a bird named " + bird.getName() + ". He is " + bird.getAge() + " years old." + " He has a wingspan of " + bird.getWingspan() + " inches." + " When he speaks he says " + bird.speak()); } } 

यहाँ मेरा सुपर क्लास है

 abstract public class Pet { private String name; private int age; // Constructor public Pet(String petName, int petAge) { this.name = petName; this.age = petAge; } // Getters public String getName() { return(this.name); } public int getAge() { return(this.age); } // Setters public void setName(String nameSet) { this.name = nameSet; } public void setAge(int ageSet) { this.age = ageSet; } // Other Methods abstract public String speak(); // toString @Override public String toString() { String answer = "Name: " + this.name + " Age: " + this.age; return answer; } } 

और ये उपवर्गों में से एक है (ये सभी एक ही दिखते हैं और एक ही त्रुटि हो रही है)

 public class Cat extends Pet { private String color; // Constructor public Cat(String petName, int petAge, String petColor) { super(petName, petAge); this.color = petColor; } // Getters public String getColor() { return(this.color); } // Setters public void setColor(String colorSet) { this.color = colorSet; } // Other Methods @Override public String speak() { return "Meow!"; } // toString @Override public String toString() { String answer = "Name: " + super.getName() + " Age: "+super.getAge() + " Color: " + this.color; return answer; } } 

तो क्या हो रहा है, मैं cat.getColor() विधि, या उप-वर्गों के लिए अद्वितीय अन्य किसी भी cat.getColor() को खोजने के लिए मुख्य विधि प्राप्त नहीं कर सकता।

Solutions Collecting From Web of "सुपर क्लास से उपवर्ग विधि को कॉल करना"

जब आप सुपर-क्लास के प्रकार के रूप में एक वैरिएबल घोषित करते हैं, तो आप उस चर के माध्यम से केवल (सार्वजनिक) तरीकों और सुपर क्लास के सदस्य चर तक पहुंच सकते हैं।

 Pet cat = new Cat("Feline",12,"Orange"); cat.getName(); // this is OK cat.getColor(); // this is not OK, getColor() is not in Pet 

कंक्रीट वर्ग (इस मामले में Cat ) में तरीकों तक पहुंचने के लिए, आपको वैरिएबल को व्युत्पन्न वर्ग के रूप में घोषित करना होगा

 Cat cat = new Cat("Feline",12,"Orange"); cat.getName(); // OK, getName() is part of Cat (and the superclass) cat.getColor(); // OK, getColor() is part of Cat 

या उस प्रकार को डालें जिसे आप जानते हैं / संदेह है कि कंक्रीट का प्रकार है

 Pet cat = new Cat("Feline",12,"Orange"); ((Cat)cat).getName(); // OK (same as above) ((Cat)cat).getColor(); // now we are looking at cat through the glass of Cat 

आप दो तरीकों को भी जोड़ सकते हैं:

 Pet pet = new Cat("Feline",12,"Orange"); Cat cat = (Cat)pet; cat.getName(); // OK cat.getColor(); // OK 

जब आप ऐसा करते हैं:

  Pet cat = new Cat("Feline",12,"Orange"); 

कंपाइलर चर के रूप में चर बिल्ली देखें इसलिए आप बिल्ली क्लैस की विशिष्ट पद्धति का उपयोग नहीं कर सकते।

आपकी समस्या को हल करने के लिए आपको बिल्ली को प्रकार कैट के रूप में घोषित करना होगा

सादर।

 Pet cat = new Cat("Feline",12,"Orange"); ^^^ This is the error. 

Pet कोई विधि नहीं है जिसे getColor() कहा जाता है

आपको करने की जरूरत है:

 Cat cat = new Cat(...); 

यहां आप सुपरक्लस प्रकार ऑब्जेक्ट (बिल्ली) को कंस्ट्रक्टर (कैट) का उपयोग करने की कोशिश कर रहे हैं जो एक उपवर्ग विधि है, जो संभव नहीं है। यह वंशानुक्रम के नियम का उल्लंघन कर रहा है।

Pet cat = new Cat("Feline", 12, "Orange");