Java中override和overload有什么用区别
这篇文章给大家分享的是有关Java中override和overload有什么用区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
成都创新互联公司从2013年成立,我们提供高端网站建设、微信小程序开发、电商视觉设计、成都app软件开发公司及网络营销搜索优化服务,在传统互联网与移动互联网发展的背景下,我们坚守着用标准的设计方案与技术开发实力作基础,以企业及品牌的互联网商业目标为核心,为客户打造具商业价值与用户体验的互联网+产品。
Java::override vs overload
Java语法如此多娇,引无数英雄竞折腰。
(1)override:
class Parent{
Object func(Number n){
...
}
}
class Child extendsParent{
Object func(Number n){
...
}
}
This is so-called override.
override的含义,就是俗称的“多态”
Child.func和Parent.func可以看作是占用了虚函数指针表里面的同一个Entry.即:Child.func覆盖了Parent.func.
Parent vtable
Entry 1:Parent.func
Child vtable
Entry 1:Child func
override是程序运行时动态决定调用哪个method,所以称为:多态性.
(2)overload
class Child{
Object func(Number n){
...
}
Object func(String s){
...
}
}
This is so-called overload.
Note:两个func方法同名,但参数不一样,完全是不相同的方法。这两个func方法在虚函数指针表中占用了两个不同的Entry.
vtable
void func(Number)
void func(String)
Attention:
overload编译时就决定了调用哪个方法,编译器根据参数类型的不同,产生了不同的调用函数地址(不同的Entry)的JVM指令.
BTW:overload怎么翻译成了重载,实在想不明白.overload英文本义是“超载”.我强烈怀疑“重载”这个词是生造词,就像“阿尔卑斯白”这样的词.只可意会,不可言传.
(3)
class Parent{
Object func(Number n){
...
}
}
class Child extendsParent{
Object func(String s){
...
}
}
This is also overload.
parent vtable
Entry 1:void func(Number n) of parent
child vtable
Entry 1:void func(Number n) of parent
Entry 2:void func(String s) of child
(4)
class Parent{
Object func(Number n){
...
}
}
class Child extends Parent{
Object func(Number n){
...
}
Object func(String s){
...
}
}
This example code has both override and overload.
parent vtable
Entry 1:void func(Number n) of parent
child vtable
Entry 1:void func(Number n) of child
Entry 2:void func(String s) of child
=>Conclusion:
a:Strongly advise to avoid using "overload".
b:Strongly advise to use different method names.
For instance:
Objcet funcNumber(Number n){
...
}
Object funcString(String s){
...
}
End.
感谢各位的阅读!关于“Java中override和overload有什么用区别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
网页标题:Java中override和overload有什么用区别
文章出自:http://azwzsj.com/article/iiiheg.html