黑马程序员技术交流社区

标题: 这个程序流程怎么算的 [打印本页]

作者: HM周一帆    时间: 2013-4-9 20:06
标题: 这个程序流程怎么算的
本帖最后由 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  求步骤
作者: 丁一    时间: 2013-4-9 20:17
执行 f.show('A') 时输出 A; 返回false
执行 f.show('B') 时输出B; 返回false  for条件不满足 不执行循环 程序结束


作者: 谢达    时间: 2013-4-9 20:18
  for(f.show('A');f.show('B')&&(i<2);f.show('C'))
1、执行f.show('A'); 输出'A';
2、执行f.show('B');输出'B'同时返回false; 所以循环在这里就终止了
所以输出就是AB
作者: 郭彦君    时间: 2013-4-9 20:21
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
作者: HM何伟    时间: 2013-4-9 20:29
当父类的引用指向子类实例对象时,类的方法为非静态成员函数。编译时期看左边,也就是父类。运行时期看右边也就是子类。
在这个题中的方法为非静态成员函数。因此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'))。
作者: 赵晓东    时间: 2013-4-9 20:42
因为你f.show()调用的是子类Demo中的show函数,return返回的都是false,父类的引用指向了子类对象,使用的是子类中的show方法
作者: 吴林飞    时间: 2013-4-9 20:44
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
               






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