/ / जावा स्थिर विधियों ओवरराइडिंग और इंटरफेस - जावा, विधियों, स्थिर, ओवरराइड

जावा स्थैतिक विधियों ओवरराइडिंग और इंटरफेस - जावा, विधियों, स्थैतिक, ओवरराइड

मेरे पास एक ए विधि के साथ एक इंटरफ़ेस है getT(), abstract B class विधि के साथ getS() तथा class C वह फैलता है B class कौन कौन से implements A interface। मैं तरीकों से ओवरराइडिंग कर रहा हूं A इंटरफ़ेस और B सुपरक्लास अंदर C उपवर्ग। फिर में main विधि मैं तुरंत C वर्ग टाइपो अगर A इस तरह: A obj = new C(); मैं "कॉल करने में सक्षम हूं getT() से obj, लेकिन "टी कॉल" कर सकते हैं getS() तरीका। मैं कैसे कॉल कर सकता हूं getS() से विधि obj, लेकिन मैं "के प्रकार को बदल नहीं सकता obj, इसे होना चाहिए A। यहां कोड है:

इंटरफ़ेस ए:

public interface A {
public String getT();
}

सार वर्ग B:

public abstract class B implements A {
public abstract String getS();
}

उपवर्ग C:

public class C extends B {

@Override
public String getT() {
System.out.println("method getT() from C class");
return null;
}

@Override
public String getS() {
return null;
}

}

और टी वर्ग के अंदर मुख्य विधि:

public class T {

public static void main(String[] args) {
A obj = new C();
obj.getT();
}

}

उत्तर:

उत्तर № 1 के लिए 1

प्रकार के संदर्भ चर के साथ A, आप कॉल नहीं कर सकते getS(), क्योंकि यह किसी भी प्रकार का हो सकता है जो लागू हो A, कहते हैं AImplementer, कि doesn "टी से विस्तार B। कोई भी A ऑब्जेक्ट doesn "t जरूरी है एक getS() तरीका। यह केवल एक होने की गारंटी है getT() तरीका।

अगर obj एक प्रकार होना चाहिए A और आपको कॉल करने की आवश्यकता है getS(), फिर शामिल करें getS() की परिभाषा में विधि A इंटरफेस:

public interface A {
public String getT();
public String getS(); // Add this line.
}

फिर B अभी भी है A, और आप कॉल कर सकते हैं getS() एक पर A संदर्भ चर।

वैसे, मैं कोई भी नहीं देखता हूं static आपके कोड में तरीके। स्थैतिक तरीकों को ओवरराइड नहीं किया जा सकता है।


उत्तर № 2 के लिए 1

विधि तक पहुंच प्राप्त करने के लिए आपको बी को ओब्जेक्ट करना होगा।

तो तुम हो सकता है:

((B)obj).getS();

downcasting: http://www.programmerinterview.com/index.php/java-questions/downcasting-in-java/


जवाब के लिए 0 № 3

ओबीज का प्रकार ए है, लेकिन ए हैन "टी मेथड गेट्स () है तो आप मुख्य पद्धति में कॉल नहीं कर सकते हैं। obj को कक्षा B या वर्ग C होना चाहिए।