Ao invés de criar o atributo ligado nas classes Luz e Ar-condicionado, Criei uma classe abstrata chamada Dispositivo com o atributo ligado = false, fiz com que a interface fosse implementada nessa classe abstrata e por fim nas especializações (Luz e Ar-condicionado) apenas fiz com que herdassem o que já havia na classe Dispositivo aplicando a sobrescrita dos métodos ligar() e desligar().
package org.example.ControleDeDispositivos;
public interface IControlavel {
void ligar();
void desligar();
}
public abstract class Dispositivo implements IControlavel {
private boolean ligado = false;
public boolean isLigado() {
return ligado;
}
public void setLigado(boolean ligado) {
this.ligado = ligado;
}
}
public class Luz extends Dispositivo {
@Override
public void ligar() {
if (!isLigado()) {
setLigado(true);
System.out.println("Luz Ligada.");
} else {
System.out.println("A luz já está ligada.");
}
}
@Override
public void desligar() {
if (isLigado()) {
setLigado(false);
System.out.println("Luz desligada.");
} else {
System.out.println("A luz já está desligada.");
}
}
}
public class ArCondicionado extends Dispositivo {
@Override
public void ligar() {
if (!isLigado()) {
setLigado(true);
System.out.println("Ar-condicionado ligado.");
} else {
System.out.println("O ar-condicionado já está ligado.");
}
}
@Override
public void desligar() {
if (isLigado()) {
setLigado(false);
System.out.println("Ar-condicionado desligado.");
} else {
System.out.println("O ar-condicionado já está desligado.");
}
}
}
public class Main {
public static void main(String[] args) {
Dispositivo luz = new Luz();
Dispositivo arCondicionado = new ArCondicionado();
luz.desligar();
luz.ligar();
luz.ligar();
luz.desligar();
luz.desligar();
arCondicionado.desligar();
arCondicionado.ligar();
arCondicionado.ligar();
arCondicionado.desligar();
arCondicionado.desligar();
}
}
Console:
A luz já está desligada.
Luz Ligada.
A luz já está ligada.
Luz desligada.
A luz já está desligada.
O ar-condicionado já está desligado.
Ar-condicionado ligado.
O ar-condicionado já está ligado.
Ar-condicionado desligado.
O ar-condicionado já está desligado.