加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:46:30 所属栏目: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[
请考虑以下代码段:
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()).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读