黑马程序员技术交流社区

标题: 关于子父类覆盖的问题 [打印本页]

作者: Lscreat    时间: 2014-12-3 09:49
标题: 关于子父类覆盖的问题
这是毕老师视频里的一个题一直没理解到为啥输入A之后调用子类方法返回flase没执行啊。
下面是代码:
  1. class Fu
  2. {
  3.                 boolean show(char a)
  4.                 {
  5.                                 System.out.println(a);
  6.                                 return true;
  7.                 }
  8. }


  9. class  Demp extends Fu
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 int  i = 0;
  14.                 Fu f = new Demo();
  15.                 Demo d =new Demo();
  16.                 for(f.show('A');f.show('B')&&(i<2);f.show("C"))
  17.                 {
  18.                         i++;
  19.                         d.show('D');
  20.                 }
  21.         }
  22.         boolean show(char a)
  23.         {
  24.                 System.out.println(a);
  25.                 return flase;
  26.         }
  27. }
复制代码

作者: Lscreat    时间: 2014-12-3 09:50
但是输入B之后执行子类返回flase后就停止了。
作者: 冬天的雪    时间: 2014-12-3 11:06
这个f.show('B')是调用子类的show方法,永远返回的是false,(f.show('B')&&(i<2))对于&&来说左边为假,右边都不需要运算了,所以判断条件永远为假,那么循环条件都不满足,当然不用循环了,所以只打印一个A
作者: hello_csu    时间: 2014-12-3 11:42
这是继承的特性,覆盖之后不管子类父类都指向的是子类的方法函数,且作用子类。
作者: java小兵    时间: 2014-12-3 13:43
第几天的视频啊?
作者: Mr.Ni    时间: 2014-12-3 22:27
为啥输入A之后调用子类方法返回flase没执行
for(a;b;c)这里a定义的是初始条件,不是判断条件,只定义不判断,
              b定义的是循环判断条件,为false就不循环了
              c定义的是循环条件,就是该怎么循环,是自增还是自减或是别的什么的
作者: hello_csu    时间: 2014-12-4 21:20
子类覆盖了父类的方法后,你就可以理解父类和子类其实调用该方法都指向的是子类的方法,所以输出子类的。你可以自己使用eclipse跟踪debug一下你就明白了。
作者: 叫我小强    时间: 2014-12-4 23:16
此题先读主函数,当到for循环f.show('A')时运行子类中的show方法结果为A返回一个false
但是false没有被使用,接着读条件f.show('B')还是运行子类的show方法,打印B返回结果为false,这个false被条件表达式调用了,false&&(i<2);双&& 的特点是,左边为false右边不运行,所以for循环结束,主函数也结束了。
打印结果为 A和B
作者: 逍遥小seng    时间: 2014-12-5 01:19
实例方法和实际调用它的对象绑定,也就是实例方法代表的是调用它的对象所属类中的实力方法。
作者: zhou1234    时间: 2014-12-5 08:51
因为show()被覆盖之后,返回的是false,而&&左边为假时,不看右边的,所以只输出一个'A'
作者: zhou1234    时间: 2014-12-5 08:53
因为show()被覆盖之后,返回的是false,而&&左边为假时,不看右边的,所以只输出一个'A'
作者: 没伞的孩子    时间: 2014-12-5 10:35
正解!!->>因为show()被覆盖之后,返回的永远是false,而&&左边为假时,不看右边的,所以只输出一个'A'
作者: lwh316658735    时间: 2014-12-5 11:54
for(f.show('A');f.show('B')&&(i<2);f.show("C"))

执行顺序:它会先执行f.show('A') 这是就打印了A但是也返回了false,但这里返回值并没有用处,这只是一个初始化。接下来就是{f.show('B')&&(i<2)}(这里返回true才会继续执行后面否则不会) 前者返回false 遇到&&后面便不会判断后面的执行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2