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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴涛 中级黑马   /  2014-3-2 20:10  /  1054 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴涛 于 2014-3-4 12:15 编辑

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;
        }
}
上面代码运行结果为什么是:A B,欢迎大家发表意见

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

6 个回复

倒序浏览
Demo类继承了Fu类,并且复写了Fu类中的show()方法。
主函数Fu f=new Demo();此处为多态,父类的引用指向了子类对象
上述for循环中for(f.show('A');f.show('B')&&(i<2);f.show('C'))因为Fu类中有show()方法所以编译可以通过
但是在执行是调用的却是子类 Demo中的show()方法,所以
f.show('A')输出一次A
f.show('B')输出一次B,并返回false,for循环结束。
所以结果为A、B

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
你注意到f调用的show方法是子类的方法,而子类的show方法返回false,这就直接导致无法进入循环,因此只输出了AB
回复 使用道具 举报
子类Demo继承父类Fu,覆写了父类的show方法,其返回值为假,主函数通过多态Fu f=new Demo();将子类对象的引用传递给f,在循环中,f调用的是子类的show方法,所以当for循环时,for(循环变量初始化 ; 循环条件判断 ;循环变量改变值),故循环变量初始化时,打印了A,从而进入条件判断f调用show打印了B,打印后返回false,经短路与(&&)判断,条件不成立退出循环。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
进入for循环时,f.show('A')就是循环的初始值,输出A。无论返回true或false都要去判断循环条件,之后执行for循环的循环条件,f.show('B')这时返回为false输出B。因为&&运算符是左边为假右边就不执行了,既然循环条件返回false循环就结束了。所以输出A,B

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
for循环三个参数,都是什么意思,请问楼主清楚吗?
第二个参数起判断作用,你既然知道是多态,那么f.show('B')返回的是false,那么这个for循环根本不会执行。因此只会输出AB。
楼主不要贪多,基础很重要,你的基础语法规则还有待提高,不要想当然
回复 使用道具 举报
理解一下多态的 特点吧
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。

在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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