Si consideri il seguente frammenti di codice:Perché il metodo protetto non è accessibile dalla sottoclasse?
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
è una sottoclasse di AbstractVehicle
che contiene un metodo speedFactor
protected
. Sono in grado di chiamare il metodo speedFactor
se viene fatto riferimento dalla stessa classe. Quando la super classe viene utilizzata come riferimento, il metodo speedFactor
non è accessibile.
Qual è il motivo per nascondere il metodo?
Perché 'protected' è visibile alla classe stessa (come 'private') e alle sue sottoclassi. È ** non pubblico **. – EpicPandaForce
I metodi di istanza 'protected' sono visibili alla classe stessa e alle _istanze_ delle sottoclassi, ma non ai metodi statici nelle sottoclassi. – khelwood
Ma SedanCar è una sottoclasse di AbstractVehicle. – MinusInfinity