回 帖 发 新 帖 刷新版面

主题:[求助]一个关于多态的问题!

class B extends A
{各种方法}

A sss = new B();
对于sss,执行的方法,是B的,还是A的啊?
自己试验了一下,貌似是A,B共有的,如果B覆盖了A的某个方法,结果是执行的B的覆盖方法!

这样对么?麻烦补充!初学者,多指教!谢谢~

回复列表 (共4个回复)

沙发

"A sss = new B();"这句话实际上等同于"B sss = new B();",所以“如果B覆盖了A的某个方法,结果是执行的B的覆盖方法!”是正确的。它执行的其实都是B的,只是因为B继承了A,初始化B前会先初始化A,感觉上好像是A,B都执行了……
“A sss = new B();”这种形式叫“上溯造型”,你可以查查这方面的资料。

板凳


class student extends person


person() p=new student()   定义的是一个人是一个学生
所以p执行的方法  如果是student重写了person的方法时就是执行student的方法
如果没重写那么就是执行person的方法

看这个例子就很明显了


3 楼

sss是B的一个对象根据new关键字来判断就行

4 楼

[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独有的方法貌似没有执行啊~

我来回复

您尚未登录,请登录后再回复。点此登录或注册