【发布时间】:2015-08-14 14:09:26
【问题描述】:
考虑以下代码 sn-ps:
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)及其子类可见。它不公开。 -
protected实例方法对类本身和子类的实例可见,但对子类中的静态方法不可见。 -
但是 SedanCar 是 AbstractVehicle 的子类。
-
vehicle.speedFactor 将无法访问
-
如果您在
SedanCar类中创建了一个方法,则可以在该方法中调用speedFactor。但不使用对象。
标签: java oop inheritance encapsulation access-specifier