这篇文章给大家分享的是有关Java中override和overload有什么用区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
Java语法如此多娇,引无数英雄竞折腰。
(1)override:
class Parent{
Object func(Number n){
...
}
}
class Child extends Parent{
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 extends Parent{
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有什么用区别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。