Bem estou tentando sobrescrever o método equals da classe Object mais estou com alguns problemas irei colocar o código para ficar mais fácil o entedimento da minha dúvida:
package com.abstrato;
public abstract class Carro
{
protected abstract void ano();
protected abstract void modelo();
protected abstract void preco();
}
class Fiat extends Carro
{
private String modelo;
private double preco;
private String ano;
public Fiat(String modelo,double preco,String ano)
{
this.modelo=modelo;
this.preco=preco;
this.ano=ano;
}
public void modelo()
{
System.out.println(this.modelo);
}
public void ano()
{
System.out.println(this.ano);
}
public void preco()
{
System.out.println(this.preco);
}
public String getModelo()
{
return this.modelo;
}
public double getPreco()
{
return this.preco;
}
public String getAno()
{
return this.ano;
}
@Override public String toString()
{
return "O modelo é "+this.modelo+"O preço é "+this.preco+"O ano é"+this.ano;
}
}
class Ford extends Carro
{
private String modelo;
private double preco;
private String ano;
public Ford(String modelo,double preco,String ano)
{
this.modelo=modelo;
this.preco=preco;
this.ano=ano;
}
public void modelo()
{
System.out.println(this.modelo);
}
public void ano()
{
System.out.println(this.ano);
}
public void preco()
{
System.out.println(this.preco);
}
public String getModelo()
{
return this.modelo;
}
public double getPreco()
{
return this.preco;
}
public String getAno()
{
return this.ano;
}
@Override public String toString()
{
return "O modelo é "+this.modelo+"O preço é "+this.preco+"O ano é"+this.ano;
}
}
class Chervolet extends Carro
{
private String modelo;
private double preco;
private String ano;
public Chervolet(String modelo,double preco,String ano)
{
this.modelo=modelo;
this.preco=preco;
this.ano=ano;
}
public void modelo()
{
System.out.println(this.modelo);
}
public void ano()
{
System.out.println(this.ano);
}
public void preco()
{
System.out.println(this.preco);
}
public String getModelo()
{
return this.modelo;
}
public double getPreco()
{
return this.preco;
}
public String getAno()
{
return this.ano;
}
@Override public String toString()
{
return "O modelo é "+this.modelo+"O preço é "+this.preco+"O ano é"+this.ano;
}
public boolean equals(Carro carro)
{
if(carro.getModelo()==this.modelo)
return true;
else
false;
}
}
class Main
{
public static void main(String args[])
{
Chervolet chervorlet = new Chervolet("Omega",255.5,"2005");
Fiat fiat = new Fiat("Omega",255.5,"2007");
if(chervorlet.equals(fiat));
System.out.println("OI");
}
}
Bem minha idéia a princípio é a seguinte se os carros tiverem modelos iguais que dizer que são iguais eu criei um método equals na minha classe
Chervolet passando o Objeto do carro a qual eu quero comparar:
Mais está com o erro, minha idéia é a seguinte eu coloquei a váriavel que vai receber o objeto carro do tipo Carro já que toda classe herda da classe carro mais não estou conseguindo chamar o método getModelo do respectivo objeto que estou passando como parâmetro o eclipse está me acusando que a classe Carro não tem esse método, mas na verdade não tem mesmo eu só coloquei do tipo Carro porque pode receber qualquer
marca Fiat Ford…ect se eu colocar um tipo especifico tipo Fiat por exemplo ai tb vai dar pau porque quando eu colocar do tipo de outra marca não vai dar certo… o que vc sugerem que eu posso fazer para resolver esse problema…???
[quote=Puppets]o que vc sugerem que eu posso fazer para resolver esse problema…???
[/quote]
Pense primeiro porqueê vc está sobrescrevendo o metodo equals de Carro ?
Tlv seja porque vc quer saber se dois carros são iguais. Mas carro é um objeto, porque vc não usa == com dois carros ? Porque alguem lhe deve ter explicado que não é assim que se comparam dois objetos e sim com equals. E por isso vc quer sobreescrever equals. Mas se tudo isto é verdade - e é - então porque vc comparar duas Strings, que são objetos, com == ?
Acaso não é exatamente isto que vc sabe que não pode fazer ?
O seu conceito de usar os atributos internos para a comparação está correto, mas mas ele tem que ser coerente com a regra de que objetos só se comparam com equals() e não com ==. (*)
(* só se comparam com equals normalmente. Existem casos em que é necessário comparar com ==)
Equals tem como assinatura receber Object e não a classe em particular. Vc tem que implementar boolean equlas(Object e) tb além de equals (Carro c).
Por fim, o método equals deve ser implementdo na classe abstrata Carro.
Vc quer comparar Carros, certo ?
Tudo bem cara mais minha intenção e sobrescrever o método equals
ai no caso é uma String mais pode ser algum método específico da classe com seus atributos por isso estou tentando fazer dessa forma sei que tem jeito mais não estou lembrado.
É isso que vc fez que eu quero fazer mais quando vc chama o método
carro.getModelo() o compilador não reconhece esse método mesmo passando uma referência da classe esse é o problema.
[quote=Puppets]Tudo bem cara mais minha intenção e sobrescrever o método equals
ai no caso é uma String mais pode ser algum método específico da classe com seus atributos por isso estou tentando fazer dessa forma sei que tem jeito mais não estou lembrado.[/quote]
Como??? Não entendi onde você quer chegar, da forma feita acima você está sobrescrevendo o método equals.
Se fosse um atributo do tipo int, você poderia fazer assim:
Eu entendi o que vc quizer dizer mas isso não está dando certo cara
como falei o compilador não está reconhecendo esse método tenta compilar
ai dessa forma vc vai ver que quando vc monta o if e chama o método carro.getModdelo() vai dar que é indefinido na classe Carro
Repare que em todas as classes (Fiat, Chevrolet) você tem os mesmos códigos. Acho que todo esse código devia estar na clase Carro.
Ah, e o problema do getModelo não funcionar, é que na classe Carro não tem nenhum método getModelo, esse método está definidos nas classes base (Fiat, Chevrolet), por isso que eu falei desse código todo estar na classe Carro.