老尸 发表于 2015-1-18 11:14:47

JAVA网站制作之完全进修Java言语中的掩盖和重载

为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是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的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。

愤怒的大鸟 发表于 2015-1-20 18:25:42

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

第二个灵魂 发表于 2015-1-26 07:58:15

是一种将安全性(Security)列为第一优先考虑的语言

蒙在股里 发表于 2015-1-28 10:00:58

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

简单生活 发表于 2015-1-29 12:48:28

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

飘飘悠悠 发表于 2015-1-29 23:37:50

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

兰色精灵 发表于 2015-2-6 07:04:15

是一种使用者不需花费很多时间学习的语言

仓酷云 发表于 2015-2-11 06:20:39

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

小妖女 发表于 2015-2-19 07:48:34

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

活着的死人 发表于 2015-3-6 13:05:53

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

海妖 发表于 2015-3-6 14:09:20

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

小魔女 发表于 2015-3-13 01:33:48

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

老尸 发表于 2015-3-20 09:06:36

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
页: [1]
查看完整版本: JAVA网站制作之完全进修Java言语中的掩盖和重载