Java 协变返回类型是指在子类中重写一个方法时,该方法的返回类型可以是父类中该方法返回类型的子类。这意味着子类可以返回更具体的类型,而无需强制转换为父类类型。
例如,假设有一个父类 Animal 和一个子类 Dog,它们都有一个返回类型为 Animal 的方法 getAnimal。在 Dog 类中重写该方法时,可以将返回类型更改为 Dog,因为 Dog 是 Animal 的子类。这样一来,当调用 Dog 的 getAnimal 方法时,会返回一个 Dog 对象而不是 Animal 对象。
导出类(子类)覆盖(即重写)基类(父类)方法时,返回的类型可以是基类方法返回类型的子类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| package com.evada.de;
public class Ay {
public static void main(String[] args) { Person person = new Boy(); Flower flower = person.buy(); flower.like(); RoseFlower roseFlower = (RoseFlower) person.buy(); roseFlower.like(); roseFlower.love(); } } class Person{ public Flower buy(){ System.out.println("Flower..."); return new Flower(); } }
class Boy extends Person{
@Override public RoseFlower buy(){ System.out.println("RoseFlower..."); return new RoseFlower(); } } class Flower{
public void like(){ System.out.println("like"); } } class RoseFlower extends Flower{
public void love(){ System.out.println("love...."); } }
|