关于protect作用域的问题

在做hivesql解析代码阅读时,发现当子类和父类在不同的包里面,没有办法访问父类的protect修饰的方法,后来才发现自己理解错了,不是不同包的子类不能访问父类protected的方法和变量,而是在不同包不能利用该父类的引用实例来访问该父类的变量和方法。

首先看一下网上找到的资料

Peisl在博客里解释

再看一段代码

package son;
 import father.Person;
 
class Student extends Person{
     public void myIntroduce(){
     introduce();// 这里才是“子类访问父类的protected方法”
     }
     public static void main(String args []){
         Person p = new Person();
         p.myIntroduce();这是实例化父类后访问父类的保护方法。
     }
 }

其实是两个完全不同的概念。

java中几个修饰符的权限如下

 
 
public
protected
default
private
同类
T
T
T
T
同包
T
T
T
 
子类(不同包)
T
T
 
 
不同包中无继承关系的类
T
 
 
 

可以看到 在protected修饰的变量或者方法中,不同包中无继承关系的类是无法访问父类的,但子类是可以访问父类的保护成员的,仅限于在子类中访问父类的保护成员,而且是子类访问,不是父类的实例访问,在不同包中的父类实例(相同包的父类的实例也是一样)是没有权限访问父类的保护成员的。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值