在 Java 中,協變(covariance)是指子類對象可以賦值給父類引用,而不會導致類型轉換錯誤。在接口中,協變主要體現在方法參數的繼承和返回值的擴展上。
例如:
interface Animal {
void eat(Animal animal);
}
class Dog implements Animal {
@Override
public void eat(Animal animal) {
// ...
}
}
class GoldenDog extends Dog {
// ...
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new GoldenDog();
myAnimal.eat(new GoldenDog()); // 協變體現在這里,GoldenDog 可以賦值給 Animal 類型
}
}
例如:
interface Animal {
Animal getAnimal();
}
class Dog implements Animal {
@Override
public Dog getAnimal() {
return this;
}
}
class GoldenDog extends Dog {
// ...
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new GoldenDog();
Animal animal = myAnimal.getAnimal(); // 協變體現在這里,GoldenDog 可以賦值給 Animal 類型
}
}
需要注意的是,協變只適用于引用類型,對于基本數據類型(如 int、float 等)是不適用的。同時,協變要求子類對象與父類對象具有相同或更寬泛的類型,以確保類型安全。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。