Kovariantne tagastustüüp

Allikas: Vikipeedia

Objektorienteeritud programmeerimises on võimalik alamklassides meetodeid üle kirjutada. Kui muuta ülekirjutatud meetodi tagastustüüpi, siis seda tehnikat nimetatakse kovariantseks tagastustüübiks.

Kovariantsed tagastustüübid on Javas lubatud alates JDK5.0 versioonist, seega järgnev näide ei töötaks varasemates versioonides:

class A {
}

class B extends A {
}

class C {
   A getFoo() {
      return new A();
   }
}

class D extends C {
   B getFoo() {
      return new B();
   }
}

Tavaliselt kovariantse tagastustüübi puhul peab alamklassi meetodis deklareeritav tagastustüüp jääma samaks, või olema üks selle tagastustüübi alamklassidest, järgides Liskovi asendusprintsiipi.