目录
“不同包的子类中” <===> “不同包的子类中的成员方法中的本子类的实例”可以调用父类中被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可调用的方法不同已经说明。