Kovariantne tagastustüüp

Allikas: Vikipeedia
Jump to navigation Jump to search

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.