黑马程序员技术交流社区

标题: 问(1):关于子类调用父类被覆盖的方法? [打印本页]

作者: 徐鸿燕    时间: 2013-3-16 20:17
标题: 问(1):关于子类调用父类被覆盖的方法?
本帖最后由 徐鸿燕 于 2013-3-16 21:06 编辑

求解:下面代码的结果为何是 (A 和 B)?
本题在:毕老师Java基础视频——第10天——第06小节——第4题
  1. public class Demo extends Fu_1{
  2.         public static void main(String[] args) {
  3.                 int i = 0;
  4.                 Fu_1 f = new Demo();
  5.                 Demo d = new Demo();
  6.                 for (f.show('A'); f.show('B') && (i < 2); f.show('C')){//不解
  7.                         i++;
  8.                         d.show('D');
  9.                 }
  10.         }
  11.         public boolean show(char a){
  12.                 System.out.println(a);
  13.                 return false;
  14.         }
  15. }
  16. class Fu_1{
  17.         boolean show(char a){
  18.                 System.out.println(a);
  19.                 return true;
  20.         }
  21. }
复制代码
求解:下面代码的结果为何是 (A 和 B)?

作者: 姓名长度不符    时间: 2013-3-16 20:27
for (f.show('A'); f.show('B') && (i < 2); f.show('C'))
for语句的格式搞清楚就好了执行语句f.show('A'),自然打印A,
判断语句f.show('B') && (i < 2),f.show('B') 返回true,而且打印B,但是i<2返回false,
运算符&& 是同真才返回真,故循环语句结束,退出循环
自然打印 A B
作者: 黑马-郑玉元    时间: 2013-3-16 20:40
本帖最后由 黑马-郑玉元 于 2013-3-16 20:44 编辑
  1.     public class Demo extends Fu_1{
  2.             public static void main(String[] args) {
  3.                     int i = 0;
  4.                     Fu_1 f = new Demo();//父类的引用指向子类的对象
  5.                     Demo d = new Demo();
  6.                     for (f.show('A'); f.show('B') && (i < 2); f.show('C')){//因为子类重写了父类的方法,所以实际上调用的是子类的show方法,所以
  7.                                                                                  //打印A和B,执行后返回的是false,&&是短路与运算,
  8.                                                                         //前面的是false,后面的就不会再继续执行了,for循环结束,所以只输出AB.
  9.                             i++;                                             
  10.                             d.show('D');
  11.                     }
  12.             }
  13.             public boolean show(char a){
  14.                     System.out.println(a);
  15.                     return false;
  16.             }
  17.     }
  18.     class Fu_1{
  19.             boolean show(char a){
  20.                     System.out.println(a);
  21.                     return true;
  22.             }
  23.     }
复制代码

作者: 郝勇    时间: 2013-3-16 21:01
public class Demo extends Fu_1{
        public static void main(String[] args) {
                int i = 0;
                Fu_1 f = new Demo();
                Demo d = new Demo();
                for (f.show('A'); f.show('B') && (i < 2); f.show('C')){//      1.f.show('A');     3. f.show('B')     5.f.show('B') && (i < 2);  因为返回的是false  所以相当于false&& (i< 2);      
                      i++;                                                                   //                    而 &&运算符  只要符号左边为假  右边就不运算   这时程序就结束了   只打印A B
                            d.show('D');
                }
        }
        public boolean show(char a){       // 2.  输出A  return false   这里的false没有用到
                System.out.println(a);          //4.  输出B  return false     
                return false;
        }
}
class Fu_1{
        boolean show(char a){
                System.out.println(a);
                return true;
        }
}


作者: 徐鸿燕    时间: 2013-3-16 21:03
姓名长度不符 发表于 2013-3-16 20:27
for (f.show('A'); f.show('B') && (i < 2); f.show('C'))
for语句的格式搞清楚就好了执行语句f.show('A') ...

嗯,谢谢你的回复,已经理解了。
(f.show('B') 返回false)
作者: 徐鸿燕    时间: 2013-3-16 21:03
黑马-郑玉元 发表于 2013-3-16 20:40

理解了,感谢你的解答。
作者: 徐鸿燕    时间: 2013-3-16 21:04
郝勇 发表于 2013-3-16 21:01
public class Demo extends Fu_1{
        public static void main(String[] args) {
                int ...

同上,感谢你的解答。




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