Java学习4-关于父子类关系中protected关键字的新认识

学习Java基础知识时,学习到类的继承关系时就会看到一张父子类中,子类能访问父类资源的开闭关系,入下表

Java访问控制范围
 类内部同包下子类外部类
public✔️✔️✔️✔️
protected✔️✔️✔️×
default✔️✔️××
private✔️×××

很多年都认为只要是protected修饰的,子类时可以访问的,这个并没有错的,但是今天无意中在一个测试类中想编写以下代码

ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath:resourceTestXml.xml");
classPathXmlApplicationContext.loadBeanDefinitions();

但是idea并没有提示存在这个方法。这是spring源码中的类,ClassPathXmlApplicationContext的直接父类是AbstractXmlApplicationContext,父类中实现了AbstractXmlApplicationContext父类的父类的抽象方法loadBeanDefinitions方法。

然后我打开已经装载编译好的spring的源码在ClassPathXmlApplicationContext中某一个方法中加入loadBeanDefinitions是可以的,一下子有点懵,protected关键字修饰的方法子类时完全可以调用的为什么上面的代码不行,同在org.springframework.context,support包中,并且是父子类继承关系。然后细细再品味了下上面的表格,访问限制关系。突然发现我编写这行代码的包是我自己创建的包,编写代码的类也不存在父子继承关系,所以不行。

从而明白,这里指的子类其实是指子类内部,如果子类在别的包中,那么子类也是看不见这个方法的,或者没有权限,因为不在一个包下。这样其实就很好的封装和保护了spring底层源码。

protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值