Java: Llamar a un método de una clase desde otra (creo)

Maaarc

Buenas, tengo el siguiente problema:

  • Tengo 2 clases: Computer y Radio, con un atributo boolean que me dice si están encendidas o apagadas.

  • Tengo 1 tercera clase que me apaga ambos objetos.

package escritorio;

/**
 *
 * @author Magopla
 */
public class Desk {
    private Boolean tidy;
    
public Desk (Boolean t, Computer c){ tidy = t; //Computer.state = c; }
public boolean isTidy(){ return c.getState(); // <-- Necesito saber si esta ON/OFF el PC y eso es lo que intentaba hacer } }
package escritorio;

/**
 *
 * @author Magopla
 */
public class Escritorio {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Computer computer1 = new Computer( true, "computer1");
        Radio radio1 = new Radio( true, 10.10);
        Desk desk1 = new Desk ( false , computer1);
        // TODO code application logic here
        System.out.println("Hola");
    }
    
}

Código de la clase "COMPUTER", aqui esta el atributo de si esta apagado o encendido y el método que sirve para saber en que estado esta el objeto.

package escritorio;
/**
 *
 * @author Magopla
 */
public class Computer {
    private boolean state;
    private String brand;
        
public Computer (boolean s, String b){ state = s; brand = b; }
public boolean turnON(){ return state = true; }
public boolean turnOFF(){ return state = false; }
public boolean getState(){ // < - - Este es el método que necesito en "Desk" return state; } public void getInfo(){ System.out.println("Computer: " + brand +" estado: " + state); } }

Que es lo que tengo que hacer para eso? Haria un Extends pero para que el Desk tenga las variables de Computer + Radio ( y más clases que me faltan ) creo que no funcionaría xd

Scottie

No se si entiendo muy bien tu problema, pero para que las clases se conozcan tendrías que almacenar una referencia del objeto que quieras manejar. Asi seria como deberias continuar:

public class Desk {
    private Boolean tidy;
    private Computer computer
    
public Desk (Boolean t, Computer c){ tidy = t; computer.state = c; } public boolean isTidy(){ return c.getState(); // <-- Necesito saber si esta ON/OFF el PC y eso es lo que intentaba hacer } }

PD: Mola mucho tu avatar ;)

2 1 respuesta
Maaarc

#2 Pa'representar ;D

Si alguien más tiene esta duda algún día:

public class Desk {
    private Boolean tidy;
    public Computer Computer;
    
public Desk (boolean t, Computer c){ tidy = t; Computer = c; } public boolean isTidy(Computer c){ return c.getState(); } }
1 respuesta
Symleto

No acabo de entender el uso de la variable tidy en tu programa. Para qué sirve, exactamente? En la clase Desk no la usas (de momento) para nada. Sólo la inicializas en el constructor, pero nada más.

Luego, en la clase Computer, los métodos que encienden o apagan el ordenador, devuelven true o false, dependiendo de lo que hagas... para qué?.

Lo más lógico, creo, es hacer el setState (boolean state), y el getState tal y como lo has hecho.

Thanat0s

#3 Poner como public el objeto Computer en la clase Desk es una aberración.

De hecho, no sé para qué almacenas un computer dentro del desk.

Bastaría con pasarle por parámetro el Computer en la función isTidy y hacer el getState().

1
JuAn4k4

El problema está en que de momento no entiendes muy bien el concepto de la programación orientada a objetos.

¿ Qué es lo que quieres hacer ? Porque en realidad no esta muy claro.

public class Desk{

public static void main(String[] args) {
  Device radio = new Radio();
  if (radio.isOn()) {
     radio.turnOff();
  }

  Device computer = new Computer();
  if (computer.isOn()) {
     computer.turnOff();
  }
}



public class Radio extends AbstractDevice  implements Device {

  protected void switchOff() { /* switch off the device */}
  protected void switchOn() { /* switch on the device */}

}

public class Computer extends AbstractDevice implements Device {
  protected void switchOff() { /* switch off the device */}
  protected void switchOn() { /* switch on the device */}
}

public abstract class AbstractDevice {
  private boolean isOn = false;

  protected void switchOff();
  protected void switchOn();

  public boolean isOn() { return isOn; }
  public boolean isOff() { return !isOn; }
  public void turnOn() { siwtchOn(); isOn = Boolean.TRUE; }
  public void turnOff() { switchOff(); isOn = Boolean.FALSE; }
  
} // El nombre lo puedes cambiar a algo que signifique "Se puede encender y apagar." public interface Device { boolean isOn(); boolean isOff(); void turnOn(); void turnOff(); }

Usuarios habituales

  • JuAn4k4
  • Thanat0s
  • Symleto
  • Maaarc
  • Scottie