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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Nathan矫立伟 中级黑马   /  2014-6-13 23:32  /  1029 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Fu
  2. {
  3.         boolean show(char a)
  4.         {
  5.                 System.out.println(a);
  6.                 return true;
  7.         }
  8. }
  9. class Demo 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 false;
  26.         }
  27. }
复制代码
这个程序的答案是
A
B
哪位大神能给我解释一下下啊~

7 个回复

倒序浏览
本帖最后由 Alan_Kwan 于 2014-6-13 23:43 编辑

不能删除回复吗?这条回复手误了
回复 使用道具 举报
主要在这条语句上面:for(f.show('A'); f.show('B')&&(i<2);f.show('C'))
f.show('A')打印的A,然后执行到f.show('B')返回了false打印了B,所以&&后面的不执行了,然后for循环不进去,程序结束。
回复 使用道具 举报
Alan_Kwan 发表于 2014-6-13 23:42
主要在这条语句上面:for(f.show('A'); f.show('B')&&(i

关于for循环的循环顺序能举个例子详细的解说一下吗  谢谢了
回复 使用道具 举报
Nathan矫立伟 发表于 2014-6-13 23:45
关于for循环的循环顺序能举个例子详细的解说一下吗  谢谢了

我尝试过给你解释,但是我写了一半删掉了,发现如果单纯用文字去给你解释的话我目前没有这个能力。。
你的问题应该是想问为什么平时看到的格式跟你提的这个不一样是吧。。
这个问题你可以找for语句的语法,就是两个分号之间究竟能写什么东西,看懂了那个,你就能明白了。
回复 使用道具 举报
因为f.show()调用的都是子类的show()方法。
此处分享一下一个知识:
前提:A是B的父类。
A a = new B();  // 类型提升,向上转型
这一句的过程是这样的,
 1)创建一个类A的引用a
 2)创建一个类B的实例 
3)把类B的引用赋值给a 
因为A是B的父类,所以,赋值成功。        
  如A 有两方法 m1 m2        
  B重载了其中一个m2   
  那么a.m1() 执行A.m1()
      a.m2() 执行B.m2() 
  
回复 使用道具 举报
for(f.show('A'); f.show('B')&&(i<2);f.show('C')) 这个题目就是分析这一句

1,首先for循环的顺序是  先执行f.show('A')此语句执行后,再执行判断语句 f.show('B')&&(i<2),此语句是真就执行for循环里面的语句,否则就结束循环,
2,f.show('A')这个涉及多态的问题,请看多态成员调用的总结(全归纳)
            成员变量
                        在多态中,但是父类的引用去调用成员变量的时候,这时运行中运行的是这个引用所属类中的成员变量。

                        在多态中,使用父类引用去调用成员变量:
                                在编译时期:要看引用所属类中有没有这个成员变量,有编译通过,没有编译失败。
                                在运行时期:仍然运行的是引用所属类中的成员变量。

                成员方法:
                        在多态中。当使用父类的引用去调用复写的成员方法时:
                                编译时:要看引用所属的类中有没有这个成员方法,有编译通过,没有编译失败。
                                运行时:执行的是引用所指对象所属的类中的成员方法。
               
               
                静态成员方法:
                        在多态中,当使用父类的引用去调用类中的静态方法时:
                                编译时:看引用所属类中有没有这个静态方法,有编译通过,没有编译失败
                                运行时:依然运行的引用所属类中的这个静态方法。
               
        总结:
                成员变量、静态方法编译和运行都看引用所属类。
                成员方法编译看引用所属类,运行看具体的引用所指对象所属的类中的方法。

所以结果一目了然
回复 使用道具 举报
刘腾 高级黑马 2014-6-14 09:57:39
8#
不去会死 发表于 2014-6-14 08:19
因为f.show()调用的都是子类的show()方法。
此处分享一下一个知识:
前提:A是B的父类。

B重写不是重载
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马