在面向對象的編程中,方法的協變返回類型是在子類中重寫方法時可以用“較窄”類型替換的類型。 一種值得注意的語言是C ++,這是一種相當普遍的範例。
基本介紹
- 中文名:協變返回值類型
- 外文名:Covariant return type
C#不支持返回類型協方差。 自JDK5.0發布以來,Java語言已經(部分)允許協變返回類型,[1]因此以下示例無法在先前版本上進行編譯:
// Classes used as return types: class A { } class B extends A { } // "Class B is more narrow than class A" // Classes demonstrating method overriding: class C { A getFoo() { return new A(); } } class D extends C {//Overriding getFoo() in parent class C B getFoo() { return new B(); } }
更具體地說,協變(從寬到窄)或逆變(從窄到寬)返回類型是指將覆蓋方法的返回類型改變為與原始重寫方法的返回類型相關(但不同)的類型的情況。。 兩個協變返回類型之間的關係通常是允許用Liskov替換原則替換另一個類型的關係。 這通常意味著重寫方法的返回類型將是重寫方法的返回類型的子類型。 上面的例子具體說明了這種情況。 如果不允許替換,則返回類型是不變的並導致編譯錯誤。