पर विचार करें निम्नलिखित कोड के टुकड़े:सबक्लास से संरक्षित विधि क्यों उपलब्ध नहीं है?
package vehicle;
public abstract class AbstractVehicle {
protected int speedFactor() {
return 5;
}
}
package car;
import vehicle.AbstractVehicle;
public class SedanCar extends AbstractVehicle {
public static void main(String[] args) {
SedanCar sedan = new SedanCar();
sedan
.speedFactor();
AbstractVehicle vehicle = new SedanCar();
// vehicle //WON'T compile
// .speedFactor();
}
}
SedanCar
AbstractVehicle
का एक उपवर्ग जो एक protected
विधि speedFactor
होता है। यदि विधि उसी संदर्भ में संदर्भित है तो मैं विधि speedFactor
पर कॉल करने में सक्षम हूं। जब संदर्भ के लिए सुपर क्लास का उपयोग किया जाता है तो विधि speedFactor
पहुंच योग्य नहीं है।
विधि को छिपाने के लिए क्या कारण है?
'क्योंकि protected' के लिए
: प्रवेश केवल सी का एक उपवर्ग एस इसके अलावा के शरीर के भीतर की अनुमति दी है, ईद एक दृष्टांत फ़ील्ड या उदाहरण विधि है, तो अर्थ है यदि कक्षा के लिए दृश्यमान है (जैसे 'निजी') और इसके उप-वर्ग। यह ** सार्वजनिक नहीं है **। – EpicPandaForce
'संरक्षित' उदाहरण विधियां कक्षा के लिए दिखाई देती हैं, और subclasses के _instances_ के लिए, लेकिन उपclasses में स्थिर तरीकों के लिए नहीं हैं। – khelwood
लेकिन सेडानकार सारविज्ञान का उप-वर्ग है। – MinusInfinity