多态的调用过程
public class Test1 {
public static void main(String[] args) {
CCC ddd = new DDD();
System.out.println(ddd.sum());
}
}
class CCC {
int i = 10;
int sum() {
return sum1() + 10;
}
int sum1() {
return i + 10;
}
}
class DDD extends CCC {
int i = 20;
int sum1() {
return i + 20;
}
}
总结
答案是 20+20+10=50
CCC ddd = new DDD(); 是多态的写法
- ddd.sum();只有父类用sum()方法,先进父类
- sum1()是方法的重写,因此调用子类的 sum1(),此时i=20 -->20+20=40
- 变量看声明的位置,方法调用看对象,子类对象自己有,优先用自己,自己没有,用父类