专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java重载的一个小坑(java重载什么意思)

temp10 2024-11-01 13:41:49 java教程 13 ℃ 0 评论

Java中的重载(overload)和覆盖(override),相信很多Java工程师都知道概念,而且平时也经常在用。但你真的非常了解它们了吗?

好,先来举个覆盖(override)的例子:

Java重载的一个小坑(java重载什么意思)

1.

(1)

public class Wine {

String name(){

return "Wine";

}

}

(2)

public class WhiteWine extends Wine {

@Override

String name(){

return "WhiteWine";

}

}

(3)

public class RedWine extends Wine {

@Override

String name(){

return "RedWine";

}

}

(4) 测试

public class MainTest {

public static void main(String[] args) {

Wine[] wines = {

new Wine(), new WhiteWine(), new RedWine()

};

for(Wine wine:wines){

System.out.println(wine.name());

}

}

}

这个例子简单,相信大家都猜到结果了,输出:

Wine

WhiteWine

RedWine

2. 下面这个例子呢?

public class OverloadTest {

public static String classify(Wine wine){

return "Wine";

}

public static String classify(WhiteWine wine){

return "WhiteWine";

}

public static String classify(RedWine wine){

return "RedWine";

}

public static void main(String[] args) {

Wine[] wines = {

new Wine(),new WhiteWine(),new RedWine()

};

for(Wine wine:wines){

System.out.println(classify(wine));

}

}

}

你是不是认为,也应该输出:

Wine

WhiteWine

RedWine

其实并不是,输出的是:

图1 重载输出

为什么会这样呢?

因为classify()方法被重载(overload),而要调用哪个重载是在编译时做出决定的。对于for循环中的3次循环,参数的编译时类型都是相同的 -- Wine。

所以,要避免胡乱使用重载(overload),最好永远不要写出2个具有相同参数个数的重载(overload)。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表