मेरे पास जावा में विरासत और कास्टिंग के बारे में एक प्रश्न है। मैं निम्नलिखित दो उदाहरण वर्गों और एक परीक्षण वर्ग है, और मुझे कक्षाओं के बाद मेरे सवाल राज्य:जावा में विरासत और कास्टिंग
public class Automobile {
public int var;
public Automobile() {
var = 1;
}
public String toString() {
return "AUTOMOBILE: " + var;
}
}
public class Porsche extends Automobile {
public int var;
public Porsche() {
var = 2;
}
public String toString() {
return "PORSCHE: " + var;
}
}
public class Test {
public static void main (String [] args) {
Porsche p = new Porsche();
Automobile a = new Automobile();
System.out.println ("(Automobile) p = " + (Automobile)p);
System.out.println ("(Automobile) p.var = " + ((Automobile)p).var);
}
}
उत्पादन होता है:
(Automobile) p = PORSCHE: 2
(Automobile) p.var = 1
मैं क्यों दूसरा बयान में समझ में नहीं आता हम है 1. यह 2 होना चाहिए? क्योंकि के बाद मैं पहली बार बयान में ऑटोमोबाइल के लिए पी डाली मैं अभी भी p
का प्रतिनिधित्व के रूप में PORSCHE: 2
मिल - मैं निम्नलिखित तरीके से इस बात को समझ:
फिर भी मैं ऑटोमोबाइल p
को p
casted है अपने 'मूल प्रकृति "रखता है - p
है कक्षा पोर्श का एक वस्तु, लेकिन क्योंकि पोर्श ऑटोमोबाइल फैलाता है, हम कह सकते हैं कि पी एक ऑटोमोबाइल भी है। और इसलिए जब हमने इसे ऑटोमोबाइल को स्पष्ट रूप से डाला, तो यह में हमारे मामले का उपयोग जारी रखता है, हमारे मामले में पोर्श में परिभाषित विधि toString()
है।
दूसरी ओर, अगर मैं क्या लिखना सही है, तो दूसरा प्रिंट बयान 2 देना चाहिए और नहीं 1.
अब यह मेरे लिए एक विरोधाभास के रूप लगता है, लेकिन जब से यह जावा में काम करता है, ऐसा लगता है कि मुझे समझ में नहीं आता कि कास्टिंग और विरासत प्रक्रिया के दौरान क्या चल रहा है।