|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。<P>初度见到这两个单词并没有甚么出格的感到,可是工夫长了,却发明书上一会儿用override,一会儿又用overload,弄得我的迷含混。因而就做了个总结,但愿能对和我一样对这两个观点含混不清的网友有一个匡助。
override能够翻译为掩盖,从字面就能够晓得,它是掩盖了一个办法而且对其重写,以求到达分歧的感化。对我们来讲最熟习的掩盖就是对接口办法的完成,在接口中一样平常只是对办法举行了声明,而我们在完成时,就必要完成接口声明的一切办法。除这个典范的用法之外,我们在承继中也大概会在子类掩盖父类中的办法。在掩盖要注重以下的几点:
1、掩盖的办法的标记必需要和被掩盖的办法的标记完整婚配,才干到达掩盖的效果;
2、掩盖的办法的前往值必需和被掩盖的办法的前往分歧;
3、掩盖的办法所抛出的非常必需和被掩盖办法的所抛出的非常分歧,大概是其子类;
4、被掩盖的办法不克不及为private,不然在其子类中只是新界说了一个办法,并没有对其举行掩盖。
overload对我们来讲大概对照熟习,能够翻译为重载,它是指我们能够界说一些称号不异的办法,经由过程界说分歧的输出参数来辨别这些办法,然后再挪用时,VM就会依据分歧的参数款式,来选择符合的办法实行。在利用重载要注重以下的几点:
1、在利用重载时只能经由过程分歧的参数款式。比方,分歧的参数范例,分歧的参数个数,分歧的参数按次(固然,统一办法内的几个参数范例必需纷歧样,比方能够是fun(int,float),可是不克不及为fun(int,int));
2、不克不及经由过程会见权限、前往范例、抛出的非常举行重载;
3、办法的非常范例和数量不会对重载形成影响;
4、关于承继来讲,假如某一办法在父类中是会见权限是priavte,那末就不克不及在子类对其举行重载,假如界说的话,也只是界说了一个新办法,而不会到达重载的效果。
上面是对override和overload的测试程序,个中正文中的内容都是会发生编译毛病的代码,我们将正文往失落,看看在编译时会发生甚么效果。
//对overload测试的文件:OverloadTest.java
publicclassOverloadTest{
//上面几个办法用来考证能够经由过程界说分歧的参数范例和参数的数量举行办法重载。
publicvoidfun(){
System.out.println("methodfuninOverloadTest,noparameter");
}
publicvoidfun(floatf){
System.out.println("methodfuninOverloadTest,parametertype:float");
}
publicvoidfun(inti){
System.out.println("methodfuninOverloadTest,parametertype:int");
}
publicvoidfun(inti1,inti2){
System.out.println("methodfuninOverloadTest,parametertype:int,int");
}
//上面的两个办法用来考证能够经由过程界说分歧的参数按次举行办法重载。
//必要注重:这里的参数一定不是不异的范例,不然的按次的前后就毫偶然义。
publicvoidfun1(inti,floatf){
System.out.println("methodfun1inOverloadTest,sequenceofparametersis:int,float");
}
publicvoidfun1(floatf,inti){
System.out.println("methodfun1inOverloadTest,sequenceofparametersis:float,int");
}
//上面的两个办法用来考证办法抛出的非常关于重载的影响.
//不管是非常的范例仍是非常的个数都不会对重载形成任何的影响。
publicvoidfun2()throwsTestException{
System.out.println("fun2inOverloadTest,exception:TestException");
}
publicvoidfun2(inti)throwsTestException,TestException1{
System.out.println("fun2inOverloadTest,exception:TestException,TestException1");
}
publicvoidfun2(floatf)throwsException{
System.out.println("fun2inOverloadTest,exception:Exception");
}
//不克不及经由过程抛出的非常范例来重载fun办法。
//publicvoidfun(inti)throwsException{
//System.out.println("methodfuninOverloadTest,parametertype:int,exception:Exception");
//}
//不克不及经由过程前往值重载fun办法。
//publicbooleanfun(inti)throwsException{
//System.out.println("methodfuninOverloadTest,parametertype:int,exception:Exception,return:boolean");
//returntrue;
//}
privatevoidfun3(){}
//不克不及经由过程分歧的会见权限举行重载
publicvoidfun3(){}
publicstaticvoidmain(String[]args){
//这里只是界说了OverloadTest的实例,以是test不会挪用
//OverloadTest1中的办法。
OverloadTesttest=newOverloadTest1();
//这里界说了OverloadTest1的实例,由于OverloadTest1是OverloadTest
//的子类,以是test1会挪用OverloadTest中的办法。
OverloadTest1test1=newOverloadTest1();
try{
inti=1,j=2,m=3;
//这里不会挪用OverloadTest1的fun办法
//test.fun(i,m,j);
test1.fun(i,j,m);
test1.fun();
//这个挪用不会实行,由于fun3()在OverloadTest中会见权限是priavte
//test1.fun3();
test1.fun3(i);
}catch(Exceptione){}
}
}
classOverloadTest1extendsOverloadTest{
//在子类中重载fun
publicvoidfun(inti,intm,intn){
System.out.println("Overloadfun1inOverloadTest1,parametertype:int,int,int");
}
//这个不是对父类中办法的重载,只是一个新的办法。
publicvoidfun3(inti){
System.out.println("fun2inOverloadTest1");
}
}
//对override测试的文件:OverrideTest.java
publicclassOverrideTest{
publicvoidfun()throwsTestException{
System.out.println("methodfuninOverrideTest");
}
privatevoidfun1(){
System.out.println("methodfun1inOverrideTest");
}
publicstaticvoidmain(String[]args){
OverrideTesttest=newOverrideTest1();
try{
test.fun();
test.fun1();
}catch(Exceptione){}
}
}
classOverrideTest1extendsOverrideTest{
//以下一般Override
publicvoidfun()throwsTestException2{
System.out.println("funinOverrideTest1");
}
//不克不及Override父类中的办法,由于它界说了分歧的非常范例和
//前往值。
//publicintfun()throwsTestException1{
//System.out.println("methodfuninTest");
//return1;
//}
//不克不及Override父类中的办法,由于它抛出了比父类中不法局限
//更年夜的非常。
//publicvoidfun()throwsException{
//System.out.println("funinOverrideTest1");
//}
//这个办法并没有Override父类中的fun1办法,由于这个办法在
//父类是private范例,以是这里只是相称于界说了一个新办法。
publicvoidfun1(){
System.out.println("methodfun1inTest");
}
}
classTestExceptionextendsException{
publicTestException(Stringmsg){
super(msg);
}
}
classTestException1extendsTestException{
publicTestException1(Stringmsg){
super(msg);
}
}
classTestException2extendsTestException{
publicTestException2(Stringmsg){
super(msg);
}
}
他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。 |
|