gpt4 book ai didi

Java - 来自父级的相同方法,但使用每个子级的单独属性

转载 作者:行者123 更新时间:2023-12-02 12:38:21 26 4
gpt4 key购买 nike

我对我的代码有疑问:

public abstract class Jogador {

String nome;
int pontos;
Jogador (String n) {
nome = n;
}
void aumentaPontos () {
pontos++;
}
abstract <U extends Jogador> boolean melhor (U outro);
}


class JogadorAdivinha extends Jogador {

JogadorAdivinha (String n) {
super(n);
}

boolean melhor (JogadorAdivinha outro) {
if (this.pontos > outro.pontos)
return true;
return false;
}
}


class JogadorMemoria extends Jogador {
int rodadasGanhas;

JogadorMemoria(String n) {
super(n);
}

boolean melhor(JogadorMemoria outro) {
if (this.rodadasGanhas > outro.rodadasGanhas)
return true;
return false;
}

void aumentaRodadasGanhas() {
rodadasGanhas++;
}

}

我在 Jogador 的两个子类中都会遇到编译问题。
但正如你所看到的,只有 JogadorMemoria 有 rodadasGanhas。
所以,我想知道一种处理这种情况的方法......如果我将类 Jogador 作为方法 melhor() 的参数,我将无法接收 child ......
我该怎么做才能覆盖抽象方法并且不产生难闻的气味??

最佳答案

如果你想在子类中实现这样的方法:

abstract <U extends Jogador> boolean melhor (U outro);

您必须提供override-equivalent实现,例如:

<U extends Jogador> boolean melhor (U outro) { return true; }

您不能删除子类中的类型变量,因为抽象方法的声明表明它必须能够接受 Jogador任何实例作为参数melhor 方法。

<小时/>

如果您希望这些方法具有特定的参数类型,您可以在类级别定义类型变量:

public abstract class Jogador<U extends Jodador<U>> {
abstract boolean melhor (U outro);
}

然后你可以在子类中实现它:

class JogadorAdivinha extends Jogador<JogadorAdivinha> {
boolean melhor (JogadorAdivinha outro) { return true; }
}

关于Java - 来自父级的相同方法,但使用每个子级的单独属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043524/

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