Java中的多态应用

非 Y 不嫁゛ 提交于 2019-11-30 04:24:12
 1 class Test {
 2     public static void main(String[] args) {
 3         System.out.println(new B().getValue());      //1、执行B的构造方法        //14、执行父类A的getValue得到17       //18、输出返回值17
 4     }
 5     static class A {
 6         protected int value;
 7         public A (int v) {
 8             setValue(v);         //3、调用子类B重写的setValue
 9         }
10         public void setValue(int value) {
11             this.value= value;         //5、value=10           //13、valve=16
12         }
13         public int getValue() {
14             try {
15                 value ++;           //6、value=11             //15、value=17
16                 return value;           //10、执行finally前暂存value的值11,返回11           //18、执行finally前暂存的值17,返回17
17             } finally {
18                 this.setValue(value);            //7、return前执行finally,this指当前实例对象B,调用子类B的setValue,value=22             //16、this调用子类B的setValue方法,得到value=34
19                 System.out.println(value);            //9、输出22            //17、输出34
20             }
21         }
22     }
23     static class B extends A {
24         public B () {
25             super(5);        //2、调用父类A的构造函数
26             setValue(getValue()- 3);        //5、调用父类A的getValue获得11           //11、调用子类B的setValue传入11-3的结果8
27         }
28         public void setValue(int value) {
29             super.setValue(2 * value);        //4、显式调用父类A的setValue传入10          //8、传入2*11的值22           //12、传入2*8的值16,调用父类的setValue传入16
30         }
31     }
32 }

Test.main()函数执行后的输出是( )

答:

22

34

17

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!