gpt4 book ai didi

inheritance - 父类(super class)可以返回子类吗?例如 Marry 函数?

转载 作者:行者123 更新时间:2023-12-02 01:19:42 25 4
gpt4 key购买 nike

假设我有一个方法,我希望它的返回类型与类相同。例如Cat:Marry(Cat y)Dog:Marry(Dog y) 但我不希望猫嫁给狗!

是否有一种编程语言可以让我表达这一点,并在您尝试与猫狗结婚时给出编译时错误?例如

class Animal{
void Marry(Animal X){
Console.Write(this+" has married "+X);
}
}
class Cat:Animal{}
class Dog:Animal{}

因此我希望允许 (new Cat()).Marry(new Cat()) 而不是 (new Cat()).Marry(new Dog())

换句话说,我希望 Marry 的参数类型与其类相匹配。任何语言都这样做吗? (无需编写多个 Marry 函数?)我正在设想这样的事情:

void Marry(caller X){
Console.Write(this+" has married "+X);
}

最佳答案

您可以使用泛型在 Java 中执行此操作:

class Animal<T extends Animal> {
void marry(T other) {
...
}
}

class Cat extends Animal<Cat> { ... }
class Dog extends Animal<Dog> { ... }

这是我在 Java 8 中正常工作的一段代码,对于那些想要更具体答案的人:

public class Test {
public static void main(String[] args) {
final Dog dog = new Dog();
final Cat cat = new Cat();
cat.marry(cat);
dog.marry(dog);
}
}

class Animal <T extends Animal> {
void marry(T other) {

}
}

class Dog extends Animal<Dog> {

}

class Cat extends Animal<Cat> {

}

关于inheritance - 父类(super class)可以返回子类吗?例如 Marry 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40877233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com