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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 箫庐 黑马帝   /  2011-12-9 16:02  /  2285 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 箫庐 于 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()~~

7 个回复

倒序浏览
t_mac 黑马帝 2011-12-9 16:07:23
沙发
本帖最后由 t_mac 于 2011-12-9 16:18 编辑

是我看错了吗?我怎么没看到子类覆盖fun1啊?{:soso_e132:}
你应该是问System里调的是哪个的fun2方法吧? 你这个复写也太失败了吧,跟没复写一样,返回的都是123
所以看不出来  你换个值就行了  这个里面调用的是B里面的fun2 方法。希望对你有帮助。
回复 使用道具 举报
你没看错 子类确实没有fun1() 只是继承了父类的fun1()
回复 使用道具 举报
你new  B肯定调用B里的,new  A肯定调用A里的啊,
这个面试踢不是这么写的.
回复 使用道具 举报
B b = new B();
                b.fun1(); // 建了一个B的对象 调用B中的fun1();  输出的是123
               
                A a = new A(); //建了一个A的对象 调用的是他父类中的fun1();输出的还是123,不过是子类return回来的
                a.fun1();

不知道我说明白了吗..
回复 使用道具 举报
晕.我明白了~~~
回复 使用道具 举报
方书堂 黑马帝 2011-12-9 16:32:14
7#
本帖最后由 方书堂 于 2011-12-9 16:32 编辑

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

是这样的.不过确实没有覆盖;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马