说明:以后本人展示的代码,不管是拷贝上来的还是自己写的,加上
@亲自执行的标签表示读者需要动手执行才能看见结果,以便体验读写代码的乐趣,而不是为了调大家胃口或者其它目的,感谢大家一起分享和阅读。
慎用重载,是因为使用不当会造成问题bug。
@亲自执行
public class CollectionClassifier
{
public static String classify(Set < ? > s)
{
return "Set";
}
public static String classify(List < ? > lst)
{
return "List";
}
public static String classify(Collection < ? > c)
{
return "Unknown Collection";
}
public static void main(String[] args)
{
Collection < ? >[] collections = {new HashSet < String >(),new ArrayList < BigInteger >(),new HashMap < String,String >().values()};
for(Collection < ? > c:collections)
System.out.println(classify(c));
}
}
有人可能已经看出会打印什么内容了,如果你不明白,请亲自执行一下。
为什么只会调用同一个方法呢?原因在此:
调用哪个重载方法在编译期做出决定的,根据方法的参数类型选择。
我们可以实用覆盖,利用多态的特性解决上述问题:
class Wine
{
String name()
{
return "wine";
}
}
class SparklingWine extends Wine
{
@Override
String name()
{
return "sparkling wine";
}
}
class Champagne extends SparklingWine
{
@Override
String name()
{
return "champagne";
}
}
public class Overriding
{
public static void main(String[] args)
{
Wine[] wines = {new Wine(),new SparklingWine(),new Champagne()};
for(Wine wine:wines)
System.out.println(wine.name());
}
}
请你想一想为什么能正确调用相应的方法?(总是我说出来就没有意思了)
你可能说,俺们是高手,不会犯第一个例子那样的错误!!
@亲自执行
public class SetList
{
public static void main(String[] args)
{
Set < Integer > set = new TreeSet < Integer >();
List < Integer > list = new ArrayList < Integer >();
for(int i = -3;i < 3;i++)
{
set.add(i);
list.add(i);
}
for(int i = 0;i < 3;i++)
{
set.remove(i);
list.remove(i);
}
System.out.println(set + " " + list);
}
}
偶的神啊,怎么会这样啊??!!当你看见打印的结果,可能会发出这样想法。
编写JDK的同行算是牛人了吧,同样会犯错。所以,为了确保代码质量,我们就“谨慎一点”是应该的。
分享到:
相关推荐
java大作业-聊天室,有待完善,慎用
为了解决互联网中存在的问题,需要实现Java技术在其中的有效应用。由于传统技术的限制,现有的Java-Web技术存在着一定的问题和不足。本文通过分析Java-Web开发应用的现状,对其技术特点进行了研究。在此基础上,本文对...
管理培训-领导需要慎用话语权.docx
本文只做技术交流之用,提醒各位注意无线网络安全性,请勿用于其他用途,否则后果自负。 前言:面对电脑搜索到的无线网络信号,你是否怦然心动?但看到一个个“启用安全的无线网络”你是否又感到有一丝遗憾。本人...
在ActiveX DLL工程中慎用App对象.txt
" " "课程设计要求设计一个用Java Web开发基于B/S架构的管理系统,页面至 " "少6个以上,应能反应出学生综合利用Java Web知识和数据库知识完成一 " "定的设计任务的能力,反映出学生理论联系实践的动手能力。...
加密的惨剧!慎用文件夹加密软件! 加密的惨剧!慎用文件夹加密软件!
华为网络产品与CISCO产品详细比较(内部学习-客户慎用)
把要删除的文件拖到这个文件上面即可。注意,这是强力删除。一定慎用,因为连垃圾箱都会没有的。
给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情。
继承的作用以及如何不用继承实现应该具有的功能
易语言处理事件命令慎用时钟版源码,处理事件命令慎用时钟版
移动磁盘低格工具(慎用)移动磁盘低格工具(慎用)移动磁盘低格工具(慎用)
Allegro 在设置PCB保存的时候,应该如何设置不弹出替换当前文件的警告-慎用.docx
为什么要谨慎使用Java8的默认方法?本文给出了为什么要慎用Java8默认方法的原因,解释的很详细,感兴趣的朋友可以参考一下
09:00 - 09:50 刘慎宝_京东集团财务系统架构设计 - 成长、演化、赋能 09:00 - 09:50 刘慎宝_京东集团财务系统架构设计 - 成长、演化、赋能 09:00 - 09:50 刘慎宝_京东集团财务系统架构设计 - 成长、演化、...
SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),
冰冻精灵清除器慎用
下面小编就为大家带来一篇Java并发编程总结——慎用CAS详解。小编觉得挺不错的, 现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
慎用防止窜货的方法.doc