2012-12-20 16 views
9

को देखते हुए:संदर्भ प्रकार और ऑब्जेक्ट प्रकार बदलने जावा

public class X implements Z { 
public String toString() { return "I am X"; } 
public static void main(String[] args) { 
    Y myY = new Y(); 
    X myX = myY; 
    Z myZ = myX; 
    System.out.println(myZ); 
} 
} 
class Y extends X { 
public String toString() { return "I am Y"; } 
} 

interface Z {} 

myZ के संदर्भ प्रकार क्या है और वस्तु यह संदर्भ देता है के प्रकार क्या है?

ए संदर्भ प्रकार जेड है; ऑब्जेक्ट प्रकार जेड

बी संदर्भ प्रकार वाई है; ऑब्जेक्ट प्रकार वाई

सी संदर्भ प्रकार ज़ेड है; ऑब्जेक्ट प्रकार वाई

डी संदर्भ प्रकार एक्स है; ऑब्जेक्ट प्रकार Z.

इस स्थिति में, मुझे पता है कि ऑब्जेक्ट प्रकार निश्चित रूप से वाई है, क्योंकि मैं इसे .getClass() विधि से परीक्षण कर सकता हूं। लेकिन मैं यह सुनिश्चित नहीं कर रहा हूं कि संदर्भ प्रकार क्या है। मुझे लगता है कि यह ज़ेड है लेकिन यह धारणा आंत महसूस पर आधारित है और तर्क नहीं है।

कोई भी संदर्भ प्रकार के बारे में विस्तार से बता सकता है और क्यों?

धन्यवाद।

+0

मैं सी के साथ जाऊंगा, ऑब्जेक्ट नए वाई() के साथ बनाया गया था; और myZ को Z –

उत्तर

4

वस्तु संदर्भ के प्रकार के अपने घोषणा के बिंदु पर स्थिर परिभाषित किया गया है:

Z myZ = ... 

इसलिए, संदर्भ के प्रकार Z है, इसलिए 'सी' सही जवाब होना चाहिए।

+0

के रूप में घोषित किया गया है 'संदर्भ प्रकार' का समग्र अर्थ क्या है? हमें इसकी जरूरत क्यों है? –

+2

संदर्भ वस्तु के इंटरफ़ेस की घोषणा करता है। यदि टाइप एक्स के पास विधियां प्राप्त होती हैं(), getB() और getC()। और टाइप वाई केवल getA() और getB() प्राप्त करता है, फिर एक्स से वाई तक इंटरफ़ेस (संदर्भ प्रकार) को बदलकर, आप केवल getA() और getB() तक पहुंच प्राप्त कर सकते हैं, भले ही ऑब्जेक्ट प्रकार X है। – NickL

2

वस्तु new Y(); साथ बनाया गया था तो ऑब्जेक्ट प्रकार है Y

myZZ (Z myZ = ...;) के रूप में घोषित किया गया था तो संदर्भ प्रकार Z

इसलिए है, सही जवाब है सी

0

ऑब्जेक्ट को जेड टाइप

Z myZ = myX; 
पर संदर्भित किया गया है

लेकिन मूल रूप से यह वाई प्रकार के रूप में बनाया गया था,

Y myY = new Y(); 

इसलिए, ans जाहिर सी

0

मैं जानता हूँ कि यह गलत जवाब है कि सही एक के रूप में चिह्नित किया गया है की वजह से भ्रामक है है; मैंने इसे भी पूरा किया है। सच्चाई यह है कि वे कहते हैं, संदर्भ जेड प्रकार का है और ऑब्जेक्ट प्रकार वाई है, इसलिए सी सही उत्तर है।

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