上图描述:A类在a包下,m()方法被protected修饰
上图描述:B类也在a包下,B类是A类的子类。
解析:B类和A类是同包类,B类是A类的子类,因此b对象可以调用m()方法。
上图描述:C类也在a包下。
解析:C类与A类、B类属于同包类,因此a对象和b对象都可以调用m()方法。
上图描述:D类在b包下,D类是A类的子类。
解析:虽然D类与A类不同包,但D类是A类子类,因此d对象可以调用m()方法。
上图描述:E类在b包下。
解析:E类与A类不同包,E类也不是A类子类,E与A类也不是本类,因此d对象不能调用m()方法。
上图描述:E类在b包下,E类是A类的子类。
解析:E类与A类不同包,E类是A类的子类,但d对象却不能不能调用m()方法。原因如下:E类是A类的子类,看似符合要求,但d对象是由D类创建,并非E类创建,而E类与A类又不同包,所以d对象不能调用m()方法。
综上得出结论:如果两个类不同包,但构成父子关系,则父类中被protected修饰是方法,子类对象调用该方法时必须在对应的子类中(在子类中调用该方法时必须是由子类创建的对象才能调用该方法)
原文:https://www.cnblogs.com/shenshengsu/p/10513774.html