यहाँ तीन वर्गों कि मैंने लिखा हैं:बहुरूपता
public class Shape {
public int x = 0;
public void getArea() {
System.out.println("I don't know my area!");
}
public String toString() {
return "I am a shape!";
}
public int getX() {
return x;
}
}
public class Rectangle extends Shape {
public int x = 1;
public int getX() {
return x;
}
public void getArea() {
System.out.println("L*W");
}
public String toString() {
return "I am a rectangle!";
}
}
public class Tester {
public static void main(String[] args) {
Shape s = new Shape();
Rectangle r = new Rectangle();
System.out.println(r);
System.out.println(r.x + "\n");
s = r;
System.out.println(s);
s.getArea();
System.out.println(s.x);
System.out.println(s.getX());
}
}
परीक्षक वर्ग के मुख्य विधि से उत्पादन होता है:
I am a rectangle! 1 I am a rectangle! L*W 0 1
s.x लौट क्यों करता है 0 और नहीं 1? जैसा कि एक आयत परिवर्तक का वर्तमान उदाहरण नहीं है और उस वर्ग में भी वही इंस्टेंस वैरिएबल घोषित किया गया है, या आयताकार वर्ग में परिवर्तनीय आकार वर्ग में पिछले सार्वजनिक एक्स चर को ओवरराइड नहीं करता है क्योंकि यह getX() इस प्रकार आयताकार वर्ग में विधि 1 लौट रही है?
एक सामान्य नियम के रूप में सुपरक्लास के पास इसके उप-वर्ग विधियों के कार्यान्वयन तक पहुंच केवल तभी होती है जब उन्हें उस कक्षा में भी घोषित किया जाता है? ऐसा इसलिए है क्योंकि संकलक देखेंगे कि एक ही हस्ताक्षर के साथ समान मात्रा में "आकार" वर्ग (ओवरराइड आयताकार कार्यान्वयन के साथ) में हैं और उन्हें वैध आकार विधियों के रूप में स्वीकार करते हैं?
अग्रिम धन्यवाद,
में उदाहरण चर छिपने के बारे में अधिक पढ़ सकते हैं क्यों अपने उदाहरण चर सार्वजनिक है !!? आपको कभी भी एक इंस्टेंस वैरिएबल सार्वजनिक नहीं करना चाहिए !!! – DrinkJavaCodeJava
यह देखने के लिए एक परीक्षण था कि क्या होगा। मैं encapsulation के बारे में अच्छी तरह से अवगत हूँ क्योंकि मैंने पहले एक एमवीसी डिजाइन किया है। – PragmaticProgrammer