जब आप विधियों को ओवरराइड करते हैं तो आपको विरासत विधि की दृश्यता को कम करने की अनुमति नहीं है। निम्न तालिका के अनुसार, protected
no modifier
की तुलना में अधिक पहुँचा जा सकता है:संरक्षित एक्सेस संशोधक के साथ कोई एक्सेस संशोधक नहीं है
| Class | Package | Subclass | World ————————————+———————+—————————+——————————+——————— public | y | y | y | y ————————————+———————+—————————+——————————+——————— protected | y | y | y | n ————————————+———————+—————————+——————————+——————— no modifier | y | y | n | n ————————————+———————+—————————+——————————+——————— private | y | n | n | n y: accessible n: not accessible
लेकिन जब मैं f()
ओवरराइड करने के लिए (उपवर्ग देखें) की कोशिश तो मैं त्रुटि मिलती है:
विरासत में मिला विधि की दृश्यता को कम नहीं किया जा सकता MyInterface से।
माइइंटरफेस में विधि में कोई एक्सेस संशोधक नहीं है और सबक्लास में से एक संरक्षित है, इसलिए अधिक सुलभ है। मुझे यहां क्या समझ नहीं आ रहा है? इंटरफेस implicitly में
public interface MyInterface {
void f();
}
public abstract class MyClass {
protected abstract void f();
}
public class SubClass extends MyClass implements MyInterface{
protected void f() { }
}
आप * इंटरफ़ेस विधियों को ओवरराइड नहीं करते हैं। आप * उन्हें लागू *। –
@TJCrowder - [jls jargon] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.8.1) - कक्षा में घोषित एक उदाहरण विधि एमसी सी, * overrides * एक superinterface, iff में घोषित एक और विधि एमआई ... – ZhongYu
@ bayou.io: दिलचस्प, मैंने इसे कभी नहीं सुना है। –