多态的调用过程
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
- 变量看声明的位置,方法调用看对象,子类对象自己有,优先用自己,自己没有,用父类
该代码示例展示了Java中的多态特性。创建了一个CCC的子类DDD对象ddd,通过ddd调用sum()方法。由于sum()在父类CCC中调用了sum1(),而DDD子类重写了sum1(),因此实际执行的是子类的sum1(),返回值为20+20。最终sum()加上父类CCC中的10,结果为50。这体现了Java中方法调用基于对象的实际类型而非声明类型。
271

被折叠的 条评论
为什么被折叠?



