protected不同包的子类中误区

目录

A是抽象类:

1.和A同包并继承A的B类:

2.和A同包但不继承A的C类:

3.和A不同包也不继承A的D类:

4.和A不同包但继承A的E类:

总结:


“不同包的子类中”        <===>        “不同包的子类中的成员方法中的本子类的实例”可以调用父类中被protected修饰的方法


A是抽象类:

1.和A同包并继承A的B类:

d方法不可以调用,说明 子类不能继承父类的私有方法

2.和A同包但不继承A的C类:

3.和A不同包也不继承A的D类:

下例中:D和A不同包、B是A的子类且和A同包,但B依然不能调用父类中被protected修饰的b方法。说明不同包的子类中描述的并不是下例中的场景

4.和A不同包但继承A的E类:

下例中:E和A不同包、且E是A的子类,E e可以调用父类A中被protected修饰的b方法;

B是A的子类且和A同包,这样可以预测B不仅可以调用A中被protected修饰的方法,还可以调用被默认修饰符修饰的方法(因为B和A同包),但是测试发现B b依然不能调用父类中被protected修饰的b方法,更不能调用父类中被默认修饰符修饰的c方法;

综上所述,说明了“不同包的子类中”可以调用父类中被protected修饰的方法指的是“1.E和A不同包、2.E是A子类3.在子类E的成员方法中(main方法是一种特殊的成员方法)创建的子类E的实例e”可以调用父类A中被protected修饰的方法b

总结:

“不同包的子类中”        <===>        “不同包的子类中的成员方法中的本子类的实例”

“不同包的子类中”可以调用父类中被protected修饰的方法,必须要满足三个条件:

  • 1.E和A不同包
  • 2.E是A子类
  • 3.在子类E的成员方法中(main方法是一种特殊的成员方法)创建的子类E的实例e”

满足这三个条件后,子类E的实例e才可以调用父类A中被protected修饰的方法b。

为什么必须满足第三个条件:例子1.和例子4.中B类的实例b可调用的方法不同已经说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值