黑马程序员技术交流社区

标题: 一道关于继承面试题: [打印本页]

作者: 箫庐    时间: 2011-12-9 16:02
标题: 一道关于继承面试题:
本帖最后由 箫庐 于 2011-12-9 18:15 编辑

class day002
{
        public static void main(String argv[]) {
                B b = new B();
                b.fun1();
               
                A a = new A();
                a.fun1();
        }

}

class A
{
        void fun1(){
                System.out.println(fun2());
        }
        int fun2(){
                return 123;
        }
}

class B extends A
{
        int fun2(){
                return 1234;
        }
}

谁帮忙分析下为什么b.fun1() a.fun1()~~
作者: t_mac    时间: 2011-12-9 16:07
本帖最后由 t_mac 于 2011-12-9 16:18 编辑

是我看错了吗?我怎么没看到子类覆盖fun1啊?{:soso_e132:}
你应该是问System里调的是哪个的fun2方法吧? 你这个复写也太失败了吧,跟没复写一样,返回的都是123
所以看不出来  你换个值就行了  这个里面调用的是B里面的fun2 方法。希望对你有帮助。

作者: 杨强    时间: 2011-12-9 16:10
你没看错 子类确实没有fun1() 只是继承了父类的fun1()
作者: 刘博    时间: 2011-12-9 16:15
你new  B肯定调用B里的,new  A肯定调用A里的啊,
这个面试踢不是这么写的.
作者: 杨强    时间: 2011-12-9 16:19
B b = new B();
                b.fun1(); // 建了一个B的对象 调用B中的fun1();  输出的是123
               
                A a = new A(); //建了一个A的对象 调用的是他父类中的fun1();输出的还是123,不过是子类return回来的
                a.fun1();

不知道我说明白了吗..
作者: 箫庐    时间: 2011-12-9 16:31
晕.我明白了~~~
作者: 方书堂    时间: 2011-12-9 16:32
本帖最后由 方书堂 于 2011-12-9 16:32 编辑

{:soso_e127:},你A类B类中的都是一样的啊。B类中的复写没什么意义啊
你要是吧b类中改成 int fun2(){return 456;}的话b.fun1()就会输出的是456了啊
作者: 箫庐    时间: 2011-12-9 16:32
杨强 发表于 2011-12-9 16:19
B b = new B();
                b.fun1(); // 建了一个B的对象 调用B中的fun1();  输出的是123
          ...

是这样的.不过确实没有覆盖;




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