निम्नलिखित जावा कोड क्यों पैदा करता है:जावा 'यह' वास्तव में विरासत की स्थिति में क्या संदर्भित करता है?
10
superclass
कोड सवाल में है:
class SuperClass {
int a;
public SuperClass() {
this.a = 10;
}
private void another_print() {
System.out.println("superclass");
}
public void print() {
System.out.println(this.a);
this.another_print();
}
}
class SubClass extends SuperClass {
int a;
public SubClass() {
this.a = 20;
}
private void another_print() {
System.out.println("subclass");
}
public void print() {
super.print();
}
}
public class Main {
public static void main (String[] args) {
SubClass c = new SubClass();
c.print();
}
}
, कभी बनाया SuperClass
का कोई उदाहरण नहीं है वहाँ नहीं है? न केवल जावा SuperClass
से आने की विधि की तलाश शुरू करता है, यह किसी भी तरह से जानता है कि a = 10
!
class SuperClass:
def __init__(self):
self.a = 10
def another_prn(self):
print('superclass')
def prn(self):
print(self.a)
self.another_prn()
class SubClass(SuperClass):
def __init__(self):
self.a = 20
def another_prn(self):
print('subclass')
def prn(self):
super().prn()
c = SubClass()
c.prn()
यह काम करता है के रूप में मैं उम्मीद:
20
subclass
केवल व्याख्या यह है कि अपने सहयोगियों (अजगर जावा लोगों नापसंद) के साथ आया है:
की एक ऐसी ही अजगर कोड पर विचार करें "अजगर एक असली ओओपी भाषा नहीं है "। बिलकुल भी विश्वास नहीं है।
अद्यतन: private void another_print()
मेरी गलती है, मुझे protected
का उपयोग करना चाहिए था।
समान नहीं। पाइथन में निजी तरीके नहीं हैं। – njzk2
आप निजी श्रेणी के बाद से सुपर क्लास विधि को ओवरराइड नहीं कर रहे हैं। एक वर्ग भी छुपाया जा रहा है क्योंकि दोनों वर्ग इसे घोषित करते हैं। –
आप अपने सहयोगियों को यह बताने के लिए स्वतंत्र हैं कि जावा एक शुद्ध ओओपी भाषा नहीं है (और वह पाइथन शायद है, हालांकि कोई और बेहतर जानता है)। –