A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lscreat 中级黑马   /  2014-12-3 09:49  /  1914 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是毕老师视频里的一个题一直没理解到为啥输入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. }
复制代码

12 个回复

倒序浏览
但是输入B之后执行子类返回flase后就停止了。
回复 使用道具 举报
这个f.show('B')是调用子类的show方法,永远返回的是false,(f.show('B')&&(i<2))对于&&来说左边为假,右边都不需要运算了,所以判断条件永远为假,那么循环条件都不满足,当然不用循环了,所以只打印一个A

评分

参与人数 1黑马币 +3 收起 理由
船长 + 3 赞一个!

查看全部评分

回复 使用道具 举报 1 0
这是继承的特性,覆盖之后不管子类父类都指向的是子类的方法函数,且作用子类。
回复 使用道具 举报
第几天的视频啊?
回复 使用道具 举报
为啥输入A之后调用子类方法返回flase没执行
for(a;b;c)这里a定义的是初始条件,不是判断条件,只定义不判断,
              b定义的是循环判断条件,为false就不循环了
              c定义的是循环条件,就是该怎么循环,是自增还是自减或是别的什么的
回复 使用道具 举报 1 0
子类覆盖了父类的方法后,你就可以理解父类和子类其实调用该方法都指向的是子类的方法,所以输出子类的。你可以自己使用eclipse跟踪debug一下你就明白了。
回复 使用道具 举报
此题先读主函数,当到for循环f.show('A')时运行子类中的show方法结果为A返回一个false
但是false没有被使用,接着读条件f.show('B')还是运行子类的show方法,打印B返回结果为false,这个false被条件表达式调用了,false&&(i<2);双&& 的特点是,左边为false右边不运行,所以for循环结束,主函数也结束了。
打印结果为 A和B
回复 使用道具 举报
实例方法和实际调用它的对象绑定,也就是实例方法代表的是调用它的对象所属类中的实力方法。
回复 使用道具 举报
因为show()被覆盖之后,返回的是false,而&&左边为假时,不看右边的,所以只输出一个'A'
回复 使用道具 举报
因为show()被覆盖之后,返回的是false,而&&左边为假时,不看右边的,所以只输出一个'A'
回复 使用道具 举报
正解!!->>因为show()被覆盖之后,返回的永远是false,而&&左边为假时,不看右边的,所以只输出一个'A'
回复 使用道具 举报
for(f.show('A');f.show('B')&&(i<2);f.show("C"))

执行顺序:它会先执行f.show('A') 这是就打印了A但是也返回了false,但这里返回值并没有用处,这只是一个初始化。接下来就是{f.show('B')&&(i<2)}(这里返回true才会继续执行后面否则不会) 前者返回false 遇到&&后面便不会判断后面的执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马