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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM周一帆 中级黑马   /  2013-4-9 20:06  /  1351 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM周一帆 于 2013-4-9 21:05 编辑

class Fu
{
        boolean show(char a)
        {
                System.out.println(a);
                return true;
        }
}
class Demo extends Fu
{
        public static void main(String[] args)
        {
                int i=0;
                Fu f=new Demo();
                Demo d=new Demo();
                for(f.show('A');f.show('B')&&(i<2);f.show('C'))
                {
                        i++;
                        d.show('D');
                }        
        }
        boolean show(char a)
        {
                System.out.println(a);
                return false;
        }
}
程序答案是AB  求步骤

6 个回复

倒序浏览
执行 f.show('A') 时输出 A; 返回false
执行 f.show('B') 时输出B; 返回false  for条件不满足 不执行循环 程序结束

回复 使用道具 举报
  for(f.show('A');f.show('B')&&(i<2);f.show('C'))
1、执行f.show('A'); 输出'A';
2、执行f.show('B');输出'B'同时返回false; 所以循环在这里就终止了
所以输出就是AB
回复 使用道具 举报
1、创建2个Demo对象,我觉得没什么用,都是子类的对象,调用方法时可定先找子类中的方法。
2、for(f.show('A');f.show('B')&&(i<2);f.show('C'))
    先执行f.show(‘A’),执行的是子类的show方法,所以打印A
    再执行f.show('B'),也是执行的子类的show方法,所以打印B,并返回false。
   后面就不执行了,所以打印AB
回复 使用道具 举报
当父类的引用指向子类实例对象时,类的方法为非静态成员函数。编译时期看左边,也就是父类。运行时期看右边也就是子类。
在这个题中的方法为非静态成员函数。因此f.show('A')和f.show('B')都是在子类中运行的。
for(f.show('A');f.show('B')&&(i<2);f.show('C'))调用用f.show('A')时,返回false,打印A.调用f.show('B')时,也返回false,打印B.
原来的for变成了现的for(false;false&&(i<2);f.show('C'))。
回复 使用道具 举报
因为你f.show()调用的是子类Demo中的show函数,return返回的都是false,父类的引用指向了子类对象,使用的是子类中的show方法
回复 使用道具 举报
for(f.show('A');f.show('B')&&(i<2);f.show('C'))

Fu f=new Demo(); 多态:  当父类引用指向子类对象时,编译时期查看父类中是否有该方法,如果没有编译失败,但是运行时期,调用的还是子类对象的方法。

f.show('A');初始化表达式,一定运行的,且只运行一次,输出A
f.show('B')&&(i<2);循环条件表达式,为true才执行循环体,f.show('B'),输出B并返回了false, false&&(0<2)返回false,循环到此结束。
输出  A
         B
               

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马