我们首先分析,结果:
methodA Executed!
methodB of Child!
methodA Executed!
methodB of Child!
调用的是methodA(27行),却分别执行了子类和父类的methodB(methodB of Child!和methodB of Child!)。这个肯定要在子类中重写methodB方法。
然后,在执行子类的methodB之前,又要执行了父类的methodA,这就形成了递归。看似无法实现了。
但是如果只想得到结果不是没有办法的,可以用一个变量,来控制递归的深度,从而打印出需要的代码,
这是我分析的出的结果,也许其他人有更好的办法。- class Parent {
- protected static int counter = 0;
- // methodA方法
- public void methodA() {
- System.out.println("methodA Executed!"); // 打印一行语句
- // 只让methodA递归两次.
- if (counter == 2) {
- return;
- }
- counter++;
- methodB(); // 调用methodB方法
- }
- // methodB方法
- public void methodB() {
- System.out.println("methodB of Parent!");// 打印一行语句
- }
- }
- // Child子类
- class Child extends Parent {
- // 只覆盖了Parent类中的methodB方法
- public void methodB() {
- // 第二次递归,就调用父类的methodB.
- if (counter == 2) {
- super.methodB();
- return;
- }
- System.out.println("methodB of Child!");// 打印一行语句
- super.methodA();// 调用父类的methodA方法
- }
- }
- // Test测试类
- public class Test{
- public static void main(String[] args) {
- Parent p = new Child(); // 父类引用指向子类对象
- p.methodA(); // 调用对象的methodA方法
- }
- }
复制代码 [ 本帖最后由 李治 于 2011-09-07 12:39 编辑 ] |