j**a中的多态性

时间:2013.10.09 发布人:wangjunhe88

j**a中的多态性

已解决问题

谷歌wangjunhe88用户在2013.10.09提交了关于“郑爽j**a中的多态性”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-07-26T14:11:15。j**a中的多态是怎么实现的!一个简单的例子我明白啦。!
比如一个Aniaml的基类!派生了一个Cat的子类!

那么在子类的一个方法中比如
publicvoidfn(Animalan)
{
这里有调用了一个重载的方法!就比如是print()吧!输出一段字符串!
}
传递了一个Cat对象!

那么这时候an等于Cat的对象吗!而an应该只能看到Animal的print()方法!(是这样吗?是这样吧!)
那这样不是就会调用基类的
print()方法了吗!
就这里不明白!
是如何实现的多态的!谢谢。。新手希望大家能够帮助她。

详细问题描述及疑问:j**a中的多态是怎么实现的!一个简单的例子我明白啦。!
比如一个Aniaml的基类!派生了一个Cat的子类!

那么在子类的一个方法中比如
publicvoidfn(Animalan)
{
这里有调用了一个重载的方法!就比如是print()吧!输出一段字符串!
}
传递了一个Cat对象!

那么这时候an等于Cat的对象吗!而an应该只能看到Animal的print()方法!(是这样吗?是这样吧!)
那这样不是就会调用基类的
print()方法了吗!
就这里不明白!
是如何实现的多态的!谢谢。。新手期待您的答案,谢了,下次有事儿别忘了找我 !

希望以下的回答,能够帮助你。

第1个回答

用户名:giihg  

先纠正一下楼主的说法,函数重载和函数重写来自是不一样的,重载的函数:函数名相同,参数个数不同,返回类型可以不同。重写是函数名、参数类型和参数个数都完全相同,返回类型也要相同,且重写的方法抛出的异常范围不能大于基类!
至于多态,以楼主的例子为例,我写了两个简单的类:
classAn问答imal
{
publicvoidprint(){"Iamamimal";管资村困蒸促刚这序今}--输出函数就不写了
}

classCatextendsAnima更愿八今答川始利阻缩l
{
publicvoi顶信矿告置逐dprint{"Iamc信附略会树良令苦上at";}

pul兴赵饭蛋月殖bicvoidprint(Stringname){"mynameis"+name}
}
以上的Cat继承了Animal,并重写和重载了print方法,以下是方法调用:
publicvoidfn(Animalan)//这里假设传入的参数都是Cat对像
{
an.print();
}
输出结果是:Iamcat
可如果是这样调用:
publi即座松银解心客cvoidfn(Animalan)
{
an.print("mimi");
}
就会报语法错误!为什么呢!因为指向这个Cat的引用是Anim乙相虽落迅al类型的,这个引用就看不到Cat重载的函数,所以会报语法错误,就像老板给你张单子去买东西,你只能买单子上买的东西,单子以外的东西你不能买!这里的引用用像这张单子!对于重写,由于Cat也是Animal,所以这张单子(引用)上面当然写找得到print()方法,但要主意,虽然引用是Animal类型的,但引用细轮的实际对象是Cat类型,如果Cat重写了该方法,那么基类的方法就被覆盖了,调用到的就是子类重写后的方法!就像你单子上写有要买一台iphone,但里到商店后发现没用美国原版的卖了,记装营可会但有港版的,于是你就买港供件研土进营版的咯!如果用大陆行的,也可以选择买大陆行的,或者联通版的,想当于多个继承了基类的子类表现出的不同特征!这就是多态了,不知道楼主理解了没!!!求分哈!