以下类对不同的集合类型分类,classify()方法被重载:
public class CollectionClassifier { public static String classify(Set<?> s){ return "Set"; } public static String classify(Collection<?> c){ return "Collection"; } }
以下测试将失败:
@Test public void testCollectionClassifier(){ Collection<String> c=new HashSet<String>(); //因为c声明为Collection类型,而重载方法的选择是在编译时决定的, //所以最终会调用classify(Collection<?> c) Assert.assertEquals(CollectionClassifier.classify(c), "Set"); }
重载方法的选择是在编译时决定的(即为静态选择,而覆盖方法的选择是在运行时选择的,即动态选择),如果被重载的方法具有相同的参数个数,并且参数类型之间具有继承关系(如上例参数类型Set继承Collection),那么可能导致问题。
List的remove(int)、remove(Object)使用了重载,对List<Integer>类型,在调用remove()方法时应注意区分:
@Test public void testList(){ List<Integer> list=new ArrayList<Integer>(); //-1,0,1将被自动转型为Integer类型 list.add(-1); list.add(0); list.add(1); //因为参数为int类型的1,所以会调用list.remove(int) Assert.assertEquals(list.remove(1), Integer.valueOf(0)); //因为参数为Integer类型,所以会调用list.remove(Object) Assert.assertEquals(list.remove(Integer.valueOf(1)), true); }
使用方法重载的基本原则:
1.重载的方法应具有不同的参数个数
2.如果重载的方法具有相同的参数个数,那么参数的数据类型之间不应有继承关系
3.使用不同名称的静态工厂方法,以避免多个重载的构造函数
4.如果无法避免重载的方法参数个数相同,并且参数之间具有继承关系。那么应调用同一个重载方法,以保证所有的重载方法实现相同的功能。如因为JDK5增加了CharSequence接口,所以String不可避免的出现了方法重载contentEquals(StringBuffer),contentEquals(CharSequence)。但是前者直接调用后者进行比较(String,StringBuffer都实现了CharSequence接口)
5.不要重载具有变长参数的方法
相关推荐
sentinel hasp 加密狗 for windows 2012r2驱动
php中的curl模块安装包,建议安装php后,加载该模块
是从淘宝网上真金买来的,未做任何修改,经测试正常使用里面附教程 演示网站: http://asp20100.web-14.com 功能特点:等同官网
WinCC7.41西门子官方示例程序 WinCC组态学习资料
curl-7.41.0及其极限裁剪 注意修改第一步和第二部中的路径位置
智能五笔是一套功能强大的汉字输入软件,支持32/64位的WIN 7 及 VISTA中文系统,并通过微软的兼容性认证。她内置了直接支持国家GB18030标准,能输出...灵活强大的参数设置功能,可使绝大部分人员都能称心的使用本软件。
15.04.2011 AlphaControls v7.41 Beta released * Solved important issue with skinned forms deactivation * Fixed error in TsPageControls without active page * Several improvements in the TsPageControl ...
表7.4 HatchStyle枚举类型的部分图案枚举成员图案BackwardDiagonal从右上到左下的斜线Cross水平线和垂直线交叉DarkDownwar
万能门店 sudu8_page 7.41安装更新一体包 带九大插件安装更新包.rar
万能门店 sudu8_page 7.41安装更新一体包 带九大插件安装更新包.zip微信小程序模板源码
PSASP 算例说明 CEPRI7 CEPRI36 wscc三个经典算例
curl is a command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB,...
最新64位windows tomcat和jdk组件,下载后先安装jdk,在安装tomcat,全部都是安装版,方便好用
使用该专杀工具查杀后,请使用金山毒霸进行一次全面杀毒即可 利用此专杀工具,用户不但可完成对磁碟机下载器的查杀,而依靠它自带的病毒库,还可顺便查杀磁碟机下载到用户电脑上的OnlineGames和Rootkit等流行盗号...
在很多企业的 IT 业务系统中,经常会有大量的业务规则配置,而且随着企业管理者的决策变化,这些业务规则也会随之发生更改。为了适应这样的需求,我们的 IT 业务系统应该能快速且低成本的更新。...
VERICUT7.3最新版本破解文件 已安装成功
一看就知道,不多说,需要的朋友下吧 22.05.2011 AlphaControls v7.42 Beta released * In some edit controls was added a support of transparency (if not focused) * Improved painting of buttons backgrounds...
流口水 :: 核心 org.drools/drools-core/7.41.0.Final/drools-core-7.41.0.Final.jar
流口水 :: 核心 org.drools/drools-core/7.41.0.t20200723/drools-core-7.41.0.t20200723.jar