在 Java 中,子类可以重写(override)父类的方法,但是重写的方法必须具有相同的方法名、相同的参数列表和相同的返回类型。这是 Java 语言定义的规则。\n\n所以子类重写父类的方法时,必须使用相同的形参,并且返回相同的变量类型。否则会编译错误。\n\n但是,子类重写方法时可以返回父类方法返回类型的子类。这被称为协变返回类型。例如,如果父类的方法返回类型是 Animal,子类可以重写该方法并返回 Animal 的子类,如 Cat 或 Dog。\n\n以下是一个示例:\n\njava\nclass Animal {\n public Animal eat() {\n System.out.println("Animal is eating");\n return new Animal();\n }\n}\n\nclass Cat extends Animal {\n @Override\n public Cat eat() {\n System.out.println("Cat is eating");\n return new Cat();\n }\n}\n\nclass Dog extends Animal {\n @Override\n public Dog eat() {\n System.out.println("Dog is eating");\n return new Dog();\n }\n}\n\npublic class Main {\n public static void main(String[] args) {\n Animal animal1 = new Animal();\n Animal animal2 = new Cat();\n Animal animal3 = new Dog();\n\n animal1.eat(); // Output: "Animal is eating"\n animal2.eat(); // Output: "Cat is eating"\n animal3.eat(); // Output: "Dog is eating"\n }\n}\n\n\n在上述示例中,Animal 类有一个名为 eat 的方法,并返回 Animal 类型的对象。Cat 和 Dog 类分别继承 Animal 类并重写了 eat 方法,但它们返回的是 Cat 和 Dog 类型的对象。这符合协变返回类型的规则。

Android 多态:子类重写函数的形参和返回值类型

原文地址: https://www.cveoy.top/t/topic/pTw5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录