java – 为什么无法从子类访问受保护的方法?

前端之家收集整理的这篇文章主要介绍了java – 为什么无法从子类访问受保护的方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下代码段:
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的子类,它包含受保护的方法speedFactor.如果它被同一个类引用,我可以调用方法speedFactor.当超类用于引用时,无法访问方法speedFactor.

隐藏方法的原因是什么?

解决方法

您的SedanCar类与AbstractVehicle类位于不同的包中.受保护的方法只能从同一个包或子类访问.

如果是SedanCar:

SedanCar sedan = new SedanCar();
sedan.speedFactor();

您正在从同一个包中调用受保护的方法:好的. SedanCar在包中,而main()方法是在包车中的类(实际上是同一类).

在AbstractVehicle的情况下:

AbstractVehicle vehicle = new SedanCar();
vehicle.speedFactor();

您尝试从另一个包调用受保护的方法:不行.您尝试调用它的main()方法是在包汽车中,而AbstractVehicle在包车中.

基本上理解这个:

你有一个AbstractVehicle类型的变量,它在另一个包(车辆)中声明.它可能包含也可能不包含动态类型的SedanCar.在你的情况下它确实如此,但它也可以包含另一个包中定义的任何其他子类的实例,例如在sportcar.因为你在package car(main()方法),所以不允许你调用vehicle.speedFactor()(受保护的AbstractVehicle.speedFactor()).

原文链接:https://www.f2er.com/java/121355.html

猜你在找的Java相关文章