Рассмотрим следующие фрагменты кода:Почему защищенный метод недоступен из подкласса?
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' видна самому классу (например, 'private') и его подклассам. Это не публично **. – EpicPandaForce
Методы экземпляра 'protected' видны самому классу и _instances_ подклассов, но не статическим методам в подклассах. – khelwood
Но SedanCar является подклассом AbstractVehicle. – MinusInfinity