Java基礎練習3(重載和重寫)


1.(多選題)給定java代碼如下所示,在1處新增下列()方法,是對show()方法的重載

public class Test{ 
    public void show(int x, int y, int z) { } 
    //1
}

A.public int show(int x,int y,float z){return 0;}

B.public int show(int x,int y,int z){return 0;}

C.public void show(int x,int z){}

D.public viod show(int z,int y,int x){}

 

 

答案:AC

解析:本題考查方法的重載規則

  方法的重載必須滿足方法名相同和參數不同(類型或個數)

  選項AC滿足重載的條件,正確

  選項BD參數都與定義的方法參數相同,不是重載。

 

2.(單選題)類A、B和C的定義如下:

public class A { public void f() { System.out.println("A.f()"); } } public class B extends A { public void f() { System.out.println("B.f()"); } } public class C { public void g(A a) { System.out.println("g(A a)"); a.f(); } public void g(B b) { System.out.println("g(B b)"); b.f(); } }

運行下列程序:

C c = new C();
A e = new B();
c.g(e);

輸出的結果是()

A. g(A a)  A.f()

B. g(A a) B.f()

C. g(B b) A.f()

D. g(B b) B.f()

 

答案:B

解析:C類中的兩個方法是重載的方法,編譯器會在編譯時根據簽名的不同來綁定調用不同的方法

         A e =new B(); 這句是一個向上造型,e是A類的引用,但是指向的是B類的對象,而重載看的是參數的引用類型,重寫才是看的對象類型

         因為c調用的g方法參數是A類型的,所以匹配的是g(A a)的方法,先輸出"g(A a)",然后執行a.f();

     A類和B類是父子類關系,兩個f()是重寫的方法,執行哪個方法類的方法要看具體的對象

          而e指向的對象是B對象,所以找到B類中的f方法輸出"B.f()"

          也就是子類繼承父類時,調用的方法都是子類重寫后的方法

 

3.(多選題)請看下列代碼

public class Tetromino {
    protected int move(int x) {
         return 0;
    }
}
class T extends Tetromino {
     <插入代碼>
}

在<插入代碼>處填入選項中的代碼,使T類沒有編譯錯誤的是()

A.public int move(int x) { return 0; }

B.private int move(int x) { return 0; }

C.private int move(long x) { return 0; }

D.protected long move(int x) { return 0; }

 

答案:AC

解析: 本題考查方法的重寫和重載語法。

    注:方法的重寫要遵循“兩同兩小一大”規則,“兩同”即方法名相同,形參列表相同;“兩小”指的是子類方法返回值類型應比父類方法返回值類型更小或相等;子類方法聲明拋出的異常類應比父類方法聲明拋出的異常類更小或相等;“一大”指的是子類方法的訪問權限應比父類方法的訪問范圍更大或相等。

   選項A,符合重寫的定義,A選項正確。

   選項B,不符合重寫也不符合重載的語法(訪問權限為private小於父類的protected,不滿足重寫;參數列表相同,不滿足重載),B選項錯誤。

   選項C,符合重載的語法,子類T繼承父類Tetromino的 protected int move(int x) 方法,而C選擇屬於對重寫方法的重載,所以C選擇正確。

   選項D,不符合重寫也不符合重載的語法(返回值類型為long,與父類的int不同,不滿足重寫;參數列表相同,不滿足重載),D選項錯誤

 

 

 

每日筆記:

重寫和重載有什么區別?重寫的兩同兩小一大規則是什么?

  Overload是重載的意思,Override是覆蓋的意思,也就是重寫。

  重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)。

  重寫Override表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現。

  重寫要遵循"兩同兩小一大"原則:

  兩同:1)方法名相同 2)參數列表相同

  兩小: 1)子類方法的返回值類型小於或等於父類的

           1.1)void時必須相等

             1.2)基本類型時必須相等

        1.3)引用類型時小於或相等:父類大,子類小

      2)子類拋出的異常小於或等於父類的

  一大:子類方法的訪問權限大於或等於父類的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM