Java中的多态应用

匿名 (未验证) 提交于 2019-12-02 21:52:03
 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

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