/*
创建三个类 ,分别在不同的三个包中,父亲类继承爷爷类,儿子类继承父亲类,
现在在父亲类里面创建一个儿子
对象实例,然后通过这个实例去访问继承的受保护的 eat ( ) 方法,
想问下为什么这里可以访问?,
儿子类中的 eat()方法是来自父亲类还是来自爷爷类?,
怎么判定一个protected成员是来自哪个类哪个包?,
*/
package com.myself5;
//爷爷类
public class GrandFather {
protected void eat() {
}
}
package com.myself3;
import com.myself4.Son1;
import com.myself5.GrandFather;
//父亲类
public class Father extends GrandFather{
protected int i =10;
protected void run() {
}
public static void main(String[] args) {
Son1 s = new Son1();
s.eat();
}
}
package com.myself4;
import com.myself3.Father;
import com.myself3.Son;
//儿子类
public class Son1 extends Father{
public static void main(String[] args) {
}
}
儿子类中的eat()来自父亲类,父亲类中的eat()来自爷爷类,因为父亲中没有@Override eat(),所以儿子类中的eat()来自爷爷类
顺着当前子类的父类一级一级往上找,如果父类对protected方法进行了重写就会执行对应的重写方法,没有重写再继续往上找