ITPub博客

首页 > 应用开发 > Java > Java::override vs overload

Java::override vs overload

原创 Java 作者:Jewyi 时间:2007-01-27 23:36:28 0 删除 编辑

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.

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/699145/viewspace-895286/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论
  • 博文量
    4
  • 访问量
    25427