首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 泛型上界下界:能否調用間接子類/父類的方法

     編輯:程式設計綜合問答

結論

可以調用間接子類/父類的方法。泛型上界 <T extends A> 僅要求 T 是 A 或其**任意層級子類**(直接或間接均可)。

代碼驗證

class A { void foo() { System.out.println("A"); } }
class B extends A { void bar() { System.out.println("B"); } }
class C extends B { void baz() { System.out.println("C"); } } // C 是 A 的間接子類

// 上界為 A
void test(List list) {
    for (A a : list) {
        a.foo(); // 編譯通過,A 定義的方法
        // a.bar(); // 編譯錯誤:靜態類型為 A,不知是否有 bar()
    }
}

List cList = new ArrayList<>();
cList.add(new C());
test(cList); // 合法:C 是 A 的子類(間接)

關鍵區別:編譯時類型 vs 運行時類型

  • 編譯時:引用類型為上界 A,只能調用 A 中聲明的方法(含繼承自 Object)。
  • 運行時:實際對象為 C,若強轉 ((C)a).baz() 可調用子類特有方法(需 instanceof 守衛)。

下界 <T super A> 同理

要求 T 是 A 或其**任意層級父類**(直到 Object)。可向其中添加 A 及其任意子類實例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved