Estou estudando o Use a cabeça padrões de projeto.
Estou no cap 1.
Onde ensina a encapsular os comportamentos em uma interface e implementar os vários tipos de comportamentos em classes concretas que serão usados por outras classe.
Para quem estudou por este livro estou nos exemplos do Duck.
Eu só preciso entender em que momento o método voar de VoarAlto() é chamado na classe Pato1, já que quando eu instancio o Pato1(), em PatoTeste, e chamo o método performVoar() que é herdado de Duck() que implementa comportamentoVoar.voar().
EU gostaria de entender.
Grato pela atenção
public interface ComportamentoVoar {
void voar();
}
public class VoarAlto implements ComportamentoVoar {
@Override
public void voar() {
System.out.println("Voa alto");
}
}
package duck;
public abstract class Duck {
ComportamentoGrasnar comportamentoGrasnar;
ComportamentoVoar comportamentoVoar;
public void performGrasnar () {
comportamentoGrasnar.grasnar();
}
public void performVoar () {
comportamentoVoar.voar();
}
public abstract void display();
public void setComportamentoVoar(ComportamentoVoar cv) {
this.comportamentoVoar = cv;
}
}
public class Pato1 extends Duck {
public Pato1() {
comportamentoGrasnar = new GrasnaAgudo();
comportamentoVoar = new VoarAlto();
}
@Override
public void display() {
System.out.println("Eu sou um pato real");
}
}
public class PatoTeste {
public static void main(String[] args) {
Duck pato1 = new Pato1();
pato1.performGrasnar();
pato1.performVoar();
}
}