Dúvida sobre implementação

6 respostas
B

Pessoal, por favor, me ajudem a tirar uma dúvida :

Imagine que tenho a seguinte interface :

public interface BichoEstimacao
{
	void serAmigavel();
}

Agora as seguintes classes, sendo que uma implementa a interface BichoEstimacao:

abstract class Animal
{	
	public abstract void Mover();
	public abstract void Respirar();
	public abstract void serAmigavel();  
}


class Cachorro extends Animal implements BichoEstimacao
{
	public void Mover()
	{
		//....
	}
	public void Respirar()
	{
		//....
	}
	
	public void serAmigavel()  //AQUI ESTÁ MINHA DÚVIDA
	{
		//...
	}
}

Provavelmente não faz sentido eu ter o método serAmigavel() tanto na classe abstrata Animal como na interface BichoEstimacao , mas imaginando que um dia isso possa ocorrer : qual dos dois métodos seria efetivamente implementado na classe Cachorro ?

Agradeço a ajuda!

6 Respostas

Romeo

Então, o que vc colocar em Bicho de estimação será usado por todos os objetos que o implementarem .

Agora se vc tb implementar em cachorro ele vai usar a da classe dele, pois em cachorro vc estaria sobreescrevendo o método…

B

Obrigada pela ajuda!

Mas não entendo direito : como assim ele vai usar a da classe dele?

Quando, na classe Cachorro, eu implemento o método serAmigavel() eu estou na realidade implementando o método abstrato da classe Animal (que estou herdando) ou implementando o método da interface BichoEstimacao ? Como o método tem o mesmo nome eu não sei qual dos dois está sendo implementado…

(não sei se a minha pergunta está muito confusa)

D

Quando vc estende a classe Animal vc está apenas sobrescrevendo o método da classe Animal. Se vc além disse implementa a interface BichoEstimacao, vc apenas obriga sua classe a implementar esse método.

Romeo

Falando com exemplos acho q fica mais facil…

Digamos que na Interface BichodeEstimação vc ponha o seguinte…

void serAmigavel(){

Todos tem que ser bonzinhos com os donos

}

Sendo assim, todos que implementarem BichodeEstimação serão bonzinhos com os donos.

Agora na classe Cachorro…

public void serAmigavel(){

Todos tem que ser bonzinhos com os donos e abanar o rabinho

}

Assim vc sobreescreveu o serAmigavel() do BichodeEstimação. A intenção disso é para que vc possa mudar o método do serAmigavel() de modo que satisfaça as necessidades da classe Cachorro…( sem alterar BichodeEstimação)

Romeo

perae, lendo de novo acho q é uma questão de prioridade que vc está perguntando né?

1 - Se ele tiver o método na própria classe(máxima)
2 - Métodos herdados
3 - Métodos implementados de outras classes

B

Romeo:
perae, lendo de novo acho q é uma questão de prioridade que vc está perguntando né?

1 - Se ele tiver o método na própria classe(máxima)
2 - Métodos herdados
3 - Métodos implementados de outras classes

Era exatamente isso que queria saber,Romeo… qual seria a prioridade da implementação.
Então, nesse meu caso, eu estou implementando o método serAmigavel() da classe HERDADA, e não da interface, certo?

Agora acho que entendi!

Valeu pela ajuda!

Criado 22 de março de 2007
Ultima resposta 22 de mar. de 2007
Respostas 6
Participantes 3