黑马程序员技术交流社区

标题: [已经解决,谢谢]帮我看道题目谢谢了.... [打印本页]

作者: 碎流    时间: 2014-8-27 23:37
标题: [已经解决,谢谢]帮我看道题目谢谢了....
本帖最后由 碎流 于 2014-8-28 11:51 编辑

分析运行结果,说明原理。(没有分析结果不得分)

        class A {
            void fun1() {
                      System.out.println(fun2());
                }
                int fun2() {
                        return 123;
                }
        }
         public class B extends A {
                int fun2() {
                         return 456;
                 }
              public static void main(String args[]) {
                        B b = new B();
                        b.fun1();
                        A a = b;
                        a.fun1();
                }
        }


作者: 碎流    时间: 2014-8-27 23:52
没人吗,,,
作者: hike_2008    时间: 2014-8-28 00:05
楼主看看方法调用的顺序和对应对象问题就行了;
作者: Kikyou    时间: 2014-8-28 00:13
应该是先456再123吧
作者: happymouse    时间: 2014-8-28 00:18
运行结果是:
456
456

分析如下:
1,第一个执行语句创建B对象,而B类继承A类,所以B类中的fun2()方法会覆盖A类中的fun2()方法
因此b.fun1();语句调用的是B类中的fun2()方法,故返回456
2,A a = b;语句的作用是将B类的对象赋值给父类即多态中的向上转型,a和b指向对内存中的同一对象
故调用结果也是一直的,同样为456
作者: 小子考驾照    时间: 2014-8-28 00:53
456和123,b.fun1()这里调用方法的是子类的对象,则用子类已经重写的方法,相当于this.fun1(),而a。fun()则是父类对象调用,相当于super。fun1(),代码貌似有问题,我也刚学,找不出问题在哪
作者: 碎流    时间: 2014-8-28 00:55
happymouse 发表于 2014-8-28 00:18
运行结果是:
456
456

这个代码BextendsA  前面不能加入public
我运行的时候是删除了的,可以说下什么原因吗
作者: happymouse    时间: 2014-8-28 09:13
本帖最后由 happymouse 于 2014-8-28 09:27 编辑
碎流 发表于 2014-8-28 00:55
这个代码BextendsA  前面不能加入public
我运行的时候是删除了的,可以说下什么原因吗 ...

因为一个java文件里面只能有一个public修饰的类,java文件名必须和被public修饰的类名相同
作者: 戏言丶    时间: 2014-8-28 09:30
学习了,没学到继承呢
作者: 李章敏    时间: 2014-8-28 09:34
运行结果为: 456
                   456
分析:
在子类中重写了fun2,使调用fun1的时候打印456
main方法中的b.fun1打印456
a虽然是A类,但是指向b的地址,a.func1依旧是打印456。

作者: 碎流    时间: 2014-8-28 11:50
Kikyou 发表于 2014-8-28 00:13
应该是先456再123吧

是两个456
作者: 笑脸迷人    时间: 2014-8-28 13:55
5楼分析的不错
作者: xiaoxinxin003    时间: 2015-7-13 04:21
分析得不错哦
作者: 360638403    时间: 2015-7-26 13:44
看懂了,两次都应该是456
作者: 初雪的忧伤    时间: 2016-6-28 00:40
运行结果为: 456                    456 分析: 在子类中重写了fun2,使调用fun1的时候打印456 main方法中的b.fun1打印456 a虽然是A类,但是指向b的地址,a.func1依旧是打印456。




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