hurtCat 2019-10-01 18:17 采纳率: 0%
浏览 571
已采纳

protected 修饰符与继承

问题1

//父类
package com.itheima.day_06;

public class Supper {
    protected void show() {
        System.out.println("this is Supper show");
    }
}

//子类
package com.itheima.day_07;

import com.itheima.day_06.Supper;

public class Subber extends Supper {
    public static void main(String[] args) {
        Supper sub = new Subber();
        sub.show();//报错,说明调用的是父类的方法,sub的动态绑定哪里去了?
    }
}

子类调用show()时实际调用的是父类的方法?我查看了字节码文件,发现子类字节码中没有该方法,在子类调用该方法,常量池保存的方法符号引用却是指向子类的。

问题2

//父类
package com.itheima.day_06;

public class Supper {
    protected static void show() {
        System.out.println("this is Supper show");
    }
}
//子类
package com.itheima.day_07;

import com.itheima.day_06.Supper;

public class Subber extends Supper {
    public static void main(String[] args) {
        Supper.show();//不报错???
    }
}

为什么子类可以直接调用父类的protected static 方法?

  • 写回答

2条回答 默认 最新

  • dabocaiqq 2019-10-01 23:10
    关注

    对于Protected的权限理解
    But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn’t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.
    例如:
    在不是一个包的情况之下:
    子类的引用在子类中可以调用父类的Protected方法或属性,非子类的话只能调用public方法或属性

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果