override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對接口方法的實現,在接口中一般只是對方法進行了聲明,而我們在實現時,就需要實現接口聲明的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。
基本介紹
- 中文名:覆蓋
- 外文名:override
- 含義:覆蓋了一個方法並且對其重寫
- 要求:需要實現接口聲明的所有方法
注意事項
覆蓋
重載
測試程式
驗證方法
public void fun(){ System.out.println("methodfuninOverloadTest,noparameter");}public void fun(float f){ System.out.println("methodfuninOverloadTest,parametertype:float");}public void fun(int i){ System.out.println("methodfuninOverloadTest,parametertype:int");}public void fun(int i1,int i2){ System.out.println("methodfuninOverloadTest,parametertype:int,int");}//下面的兩個方法用來驗證可以按定義不同的參數順序進行方法重載//需要注意:這裡的參數肯定不是相同的類型,否則的順序的先後就毫無意義。public void fun1(int i,float f){ System.out.println("methodfun1inOverloadTest,sequenceofparametersis:int,float");}public void fun1(float f,int i){ System.out.println("methodfun1inOverloadTest,sequenceofparametersis:float,int");}//下面的兩個方法用來驗證方法拋出的異常對於重載的影響.//無論是異常的類型還是異常的個數都不會對重載造成任何的影響。public void fun2()throwsTestException{ System.out.println("fun2inOverloadTest,exception:TestException");}public void fun2(int i)throwsTestException,TestException1{ System.out.println("fun2inOverloadTest,exception:TestException,TestException1");}public void fun2(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{//在子類中重載funpublic void fun(inti,intm,intn){ System.out.println("Overloadfun1inOverloadTest1,parametertype:int,int,int");}//這個不是對父類中方法的重載,只是一個新的方法。public void fun3(inti){ System.out.println("fun2inOverloadTest1");}}//對override測試的檔案:OverrideTest.javapublic class Override Test{ publicvoidfun()throwsTestException { System.out.println("methodfuninOverrideTest"); } private void fun1() { System.out.println("methodfun1inOverrideTest"); } public static void main(String[]args) { OverrideTest test=new OverrideTest1(); try{ test.fun(); test.fun1(); }catch(Exceptione){} }}class Override Test1extends Override Test{//以下正常Overridepublicvoidfun()throwsTestException2{System.out.println("funinOverrideTest1");}//不能Override父類中的方法,因為它定義了不同的異常類型和//返回值。//publicintfun()throwsTestException1{//System.out.println("methodfuninTest");//return1;//}//不能Override父類中的方法,因為它拋出了比父類中非法範圍//更大的異常。//publicvoidfun()throwsException{//System.out.println("funinOverrideTest1");//}//這個方法並沒有Override父類中的fun1方法,因為這個方法在//父類是private類型,所以這裡只是相當於定義了一個新方法。public void fun1(){ System.out.println("methodfun1inTest");}}classTestExceptionextendsException{ publicTestException(Stringmsg) { super(msg); }}classTestException1extendsTestException{ publicTestException1(Stringmsg) { super(msg); }}classTestException2extendsTestException{ publicTestException2(Stringmsg) { super(msg); }}