Ola, Eduardo!
Dois erros:
1º erro:
c.x
vai dar erro porque o c
esta sendo passado como paramentro pelo metodo equals e no caso é um Object e a classe Object não tem um atributo x
.
Como segue o codigo abaixo:
public boolean equals(Object c) {
return c.x==x;
}
Para resolver teria q fazer um cast no c
.
Ex.:
public boolean equals(Object c) {
return ((C)c).x==x;
}
2º erro.
A Classe D
não é filha da Classe C nem de outra Classe que seja fila da Classe C. Nesse caso o compilador vai reclamar porque ele vai ver que a Classe C não é Filha da Classe D.
C b = new D();
Sobre a Ordem o compilador vai reclamar primeiro dos tipos incompatíveis no metodo equals depois ele vai reclamar do momento que tenta fazer um new do tipo D para o Tipo C.