主题:[求助]一个关于多态的问题!
mengxin0704
[专家分:0] 发布于 2009-03-10 16:51:00
class B extends A
{各种方法}
A sss = new B();
对于sss,执行的方法,是B的,还是A的啊?
自己试验了一下,貌似是A,B共有的,如果B覆盖了A的某个方法,结果是执行的B的覆盖方法!
这样对么?麻烦补充!初学者,多指教!谢谢~
回复列表 (共4个回复)
沙发
origin1987 [专家分:60] 发布于 2009-03-10 23:19:00
"A sss = new B();"这句话实际上等同于"B sss = new B();",所以“如果B覆盖了A的某个方法,结果是执行的B的覆盖方法!”是正确的。它执行的其实都是B的,只是因为B继承了A,初始化B前会先初始化A,感觉上好像是A,B都执行了……
“A sss = new B();”这种形式叫“上溯造型”,你可以查查这方面的资料。
板凳
muyiyuwen [专家分:0] 发布于 2009-03-18 16:31:00
class student extends person
person() p=new student() 定义的是一个人是一个学生
所以p执行的方法 如果是student重写了person的方法时就是执行student的方法
如果没重写那么就是执行person的方法
看这个例子就很明显了
3 楼
zhaolong [专家分:300] 发布于 2009-03-19 23:18:00
sss是B的一个对象根据new关键字来判断就行
4 楼
mengxin0704 [专家分:0] 发布于 2009-03-21 10:28:00
[quote]"A sss = new B();"这句话实际上等同于"B sss = new B();",所以“如果B覆盖了A的某个方法,结果是执行的B的覆盖方法!”是正确的。它执行的其实都是B的,只是因为B继承了A,初始化B前会先初始化A,感觉上好像是A,B都执行了……
“A sss = new B();”这种形式叫“上溯造型”,你可以查查这方面的资料。[/quote]
但是如果B独有的方法貌似没有执行啊~
我来回复