黑马程序员技术交流社区

标题: 继承、多态!!!看着头都大了!!!谁仔细给讲讲!!! [打印本页]

作者: 黑马-郑玉元    时间: 2013-3-15 19:58
标题: 继承、多态!!!看着头都大了!!!谁仔细给讲讲!!!
本帖最后由 黑马-郑玉元 于 2013-3-16 07:15 编辑
  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. }
复制代码
求输出结果!运行的过程!!!


作者: 刘海浩    时间: 2013-3-15 20:13
首先, Fu f=new Demo();//父类引用指向子类对象,所以for循环中f.show('A'),调用子类Demo 中的show方法,输出A,返回false;
然后继续执行f.show('B')&&(i<2);输出B,返回false,所以f.show('B')&&(i<2);返回false,条件不成立,退出循环。
所以最终结果只会输出A和B。
作者: 黑马-郑玉元    时间: 2013-3-15 20:24
条理蛮清晰的!!谢谢!!!
作者: 罗海云    时间: 2013-3-15 20:30
刘海浩 发表于 2013-3-15 20:13
首先, Fu f=new Demo();//父类引用指向子类对象,所以for循环中f.show('A'),调用子类Demo 中的show方法, ...

可是我想问下哥们,为啥代码快里的不执行呢?求教
作者: 刘海浩    时间: 2013-3-15 20:34
罗海云 发表于 2013-3-15 20:30
可是我想问下哥们,为啥代码快里的不执行呢?求教

因为f.show('B')&&(i<2);返回false所以代码块中的不执行

  1.                 for(int i=0; i>1;i++)
  2.                 {
  3.                        
  4.                        System.out.println(1111);
  5.                 }   
复制代码
你可以运行这个代码试试。就明白了
作者: 罗海云    时间: 2013-3-15 20:38
刘海浩 发表于 2013-3-15 20:34
因为f.show('B')&&(i

哦。谢了。我搞错运行步骤了。
作者: 祁振朋    时间: 2013-3-15 20:42
for循环先赋初值,然后进行判断f.show('B')&&(i<2),条件成立才执行代码块。条件不成立代码块不会执行。
f.show('B') 由于前面代码父类引用指向子类对象的关系,这里的show执行的是子类的show方法,返回false,条件不成立,所以最后只是输出了AB
作者: 黑马-郑玉元    时间: 2013-3-15 20:46
祁振朋 发表于 2013-3-15 20:42
for循环先赋初值,然后进行判断f.show('B')&&(i

是的!!!
作者: 杨博    时间: 2013-3-15 20:51
  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();//创建一个Demo类对象

  16.                 for(f.show('A'); f.show('B')&&(i<2);f.show('C'))//f.show('A')中,子类重写父类,
  17.                                 {                                                                                                //调用子类,所以执行子类show,打印结果为A
  18.                                                 //f.show('B')结果就为打印'B',返回false ,循环结束
  19.                         i++;
  20.                         d.show('D');
  21.                 }                                   
  22.         }
  23.         boolean show(char a)
  24.         {
  25.                 System.out.println(a);
  26.                 return false;
  27.         }
  28. }
复制代码
运行疑问在代码中有解答,其实主要就是子类有重写父类的show,看到这点就明白了
作者: 陈丽莉    时间: 2013-3-16 01:07
若还有问题,继续追问;没有的话,请将帖子分类改成【已解决】~




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