Java中override和overload有什么用区别-创新互联
这篇文章给大家分享的是有关Java中override和overload有什么用区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
赞皇ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!Java::override vs 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有什么用区别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
当前标题:Java中override和overload有什么用区别-创新互联
当前地址:http://scyanting.com/article/cchhhp.html