我对我的代码有疑问:
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/