当前位置:编程学习 > JAVA >>

(很困惑)一个关于 继承中使用super关键字调用父类的方法问题!

--------------------编程问答-------------------- 我不明白为什么
work6.test()这个方法会输出结果为:100!
我在父类中写的方法结果应该为:5050
可是我在子类中用super关键字调用父类的方法,然后用子类对象输出时
结果竟然是100!
这让我很费解,忘大家帮我解答! --------------------编程问答-------------------- 参考一下:
http://topic.csdn.net/u/20080407/21/6622f337-f049-4c88-b762-824a5740f35e.html --------------------编程问答-------------------- 楼上正解  final 让子类看不到 --------------------编程问答-------------------- 楼主"System.out.println" 写错了 也能出结果么 --------------------编程问答-------------------- 这个问题mark了 哈哈 很有意思 --------------------编程问答-------------------- 我就不明白楼主怎么那么多的书写错误!
基础知识好好看蛤嘛 --------------------编程问答-------------------- 这个问题是另一个问题的变种:

在一个能被继承的类(非final的类)中,如果一个方法 a 调用了另一个能被 override 的方法 b,那么这样的调用应该在 JavaDOC 中注明。

或者反过来说,如果一个能被 override 的方法 b,被其他的方法调用,即如果子类重写了 b 方法,实际上会影响到其他几个调用了 b 的方法的行为,那么这件事应该在 JavaDOC 中注明。

在楼主的问题里, a 和 b 是同一个方法。


这个问题的另一个变种是: 在一个非 final 的类的构造器里,尽量不要调用能被 override 的方法。当你这么做的时候有些IDE会给出警告。这个毛病我曾经见过写了10年+程序的老程序员都会犯…… --------------------编程问答-------------------- 感觉四楼的回复真心亮了 ⊙﹏⊙b汗 --------------------编程问答-------------------- 父类的方法只调用了一次,接下来调用的是子类的方法。 --------------------编程问答--------------------
引用 9 楼 fei1710 的回复:
父类的方法只调用了一次,接下来调用的是子类的方法。

楼上正解,补充一下 在子类的运行环境里除了显示的说super是调用父类外,其他都调用子类,所以递归的第二次就是调了子类的方法了。而你传的参数是100,阶乘的结果太大,数字溢出。截位结果碰巧为100.
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,