Olá pessoal.
Estou com uma dúvida que é o seguinte: Possuo 3 classes (seguem abaixo), a classe Fonte, a classe TVComFonte e a classe TVComFonteFinal, sendo esta última a classe que contém o método main.
Na classe com o método main, quando eu executo o método ligar(), inicialmente ninguém instanciou a classe Fonte, que é pré-requisito para que a TV funcione, portanto a mensagem que meu sistema me dá é de que "Não há fonte de energia disponível".
Então, vemos no código tv.setFonte(fonte), que é um setter da classe TVComFonte que atribui o objeto recém criado "fonte" para a variável de instância Fonte, que é a nossa classe fonte inicial. Então, quando tenta-se ligar novamente a TV, com o método ligar(), a TV liga, pois satisfaz-se a condição de fonte existente, no teste de fonte==null no método ligar da classe TVComFonte.
O que não entendo, é, o que estamos enviando pelo setter na classe main tv.setFonte(fonte), para a o objeto fonte do tipo Fonte da classe TVComFonte? O objeto fonte foi recém criado, e não inserimos valor algum para a variável booleana "disponivel" do objeto fonte. Porquê o objeto fonte deixou de ser null ?
Espero que eu tenha me expressado bem.
Obrigado,
Airton
public class Fonte {
private boolean disponivel;
public void setDisponivel(boolean disp){
if (disponivel && disp){
System.out.println("A fonte de energia está disponível!");
}else if(!disponivel && !disp){
System.out.println("A fonte está indisponível!");
} else{
disponivel = disp;
String str = disponivel?"disponivel.":"indisponivel.";
System.out.println("A fonte está "+str);
}
}
public boolean estaDisponivel(){
return disponivel;
}
}
---
public class TVComFonte {
Fonte fonte;
public void setFonte(Fonte b){
this.fonte = b;
}
public void ligar(){
if(fonte == null){
System.out.println("Não há fonte de energia disponível");
}else if (fonte.estaDisponivel()){
System.out.println("TV já ligada");
}else{
fonte.setDisponivel(true);
System.out.println("TV Ligado");
}
}
public void desligar(){
if(fonte == null){
System.out.println("Não há fonte disponível");
}else if(!fonte.estaDisponivel()){
System.out.println("A fonte já está desligada");
}else{
fonte.setDisponivel(false);
System.out.println("A TV está desligada");
}
}
}
public class TVComFonteFinal {
public static void main(String[] args) {
Fonte fonte = new Fonte();
TVComFonte tv = new TVComFonte();
tv.ligar(); //retorna na tela que não há fonte de energia disponível
tv.setFonte(fonte);//não retorna nada na tela
tv.ligar();//retorna duas mensagens, que a fonte está disponível e que a TV está ligada
tv.ligar();//retorna que a TV já está ligada
tv.desligar();
}
}