黑马程序员技术交流社区
标题:
一道关于继承面试题:
[打印本页]
作者:
箫庐
时间:
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