Buenas a toda la comunidad de programadores:)
Aquí pongo la solución del ejercicio CU00642B del curso Java desde cero.
EJERCICIO
Define tres clases: Casa, SalonCasa y CocinaCasa. La clase SalonCasa debe tener como atributos numeroDeTelevisores (int) y tipoSalon (String) y disponer de un constructor que los inicialice a 0 y “desconocido”. La clase CocinaCasa debe tener como atributos esIndependiente (boolean) y numeroDeFuegos (int) y un constructor que los inicialice a false y 0. La clase Casa tendrá los siguientes atributos de clase: superficie (double), direccion (String), salonCasa (tipo SalonCasa) y cocina (tipo CocinaCasa). Define un constructor para la clase Casa que establezca a unos valores de defecto los atributos simples y que cree nuevos objetos si se trata de atributos objeto. Define otro constructor que reciba como parámetros la superficie, dirección y un objeto de tipo SalonCasa y otro de tipo CocinaCasa. Compila el código para comprobar que no presenta errores, y crea un objeto de tipo Casa usando el constructor que recibe parámetros. Ten en cuenta que antes tendrás que haber creado los objetos de tipo SalonCasa y CocinaCasa para poder pasárselos al constructor. Comprueba que el objeto Casa se inicializa correctamente consultando el valor de sus atributos después de haber creado el objeto.
Código del objeto (clase) salón casa:
public class SalonCasa{
private int numeroDeTelevisores;
private String tipoSalon;
public SalonCasa(){
numeroDeTelevisores = 0;
tipoSalon = "desconocido";
}
public SalonCasa(int valorNumeroDeTelevisores, String valorTipoSalon){
numeroDeTelevisores = valorNumeroDeTelevisores;
tipoSalon = valorTipoSalon;
}
public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){
numeroDeTelevisores = valorNumeroDeTelevisores;
}
public void setTipoSalon(String valorTipoSalon){
tipoSalon = valorTipoSalon;
}
public int getNumeroDeTelevisores(){return numeroDeTelevisores;}
public String getTipoSalon(){return tipoSalon;}
}
Código del objeto (clase) CocinaCasa:
public class CocinaCasa{
private boolean esIndependiente;
private int numeroDeFuegos;
public CocinaCasa(){
esIndependiente = false;
numeroDeFuegos = 0;
}
public CocinaCasa(boolean valorEsIndependiente, int valorNumeroDeFuegos){
esIndependiente = valorEsIndependiente;
numeroDeFuegos = valorNumeroDeFuegos;
}
public void setEsIndependiente(boolean valorEsIndependiente){
esIndependiente = valorEsIndependiente;
}
public void setNumeroDeFuegos(int valorNumeroDeFuegos){
numeroDeFuegos = valorNumeroDeFuegos;
}
public boolean getEsIndependiente(){return esIndependiente;}
public int getNumeroDeFuegos(){return numeroDeFuegos;}
}
Código del objeto (clase) Casa:
public class Casa{
private double superficie;
private String direccion;
private SalonCasa salonCasa;
private CocinaCasa cocina;
public Casa(){
superficie = 0;
direccion = "";
salonCasa = new SalonCasa();
cocina = new CocinaCasa();
}
public Casa(double valorSuperficie, String valorDireccion, SalonCasa classSalonCasa, CocinaCasa classCocinaCasa){
superficie = valorSuperficie;
direccion = valorDireccion;
salonCasa = new SalonCasa(classSalonCasa.getNumeroDeTelevisores(), classSalonCasa.getTipoSalon());
cocina = new CocinaCasa(classCocinaCasa.getEsIndependiente(), classCocinaCasa.getNumeroDeFuegos());
}
}
Quería comentar (consultar) algo. Si en el objeto (clase) CocinaCasa el código es:
public class CocinaCasa{
private boolean esIndependiente;
private int numeroDeFuegos;
public CocinaCasa(){
esIndependiente = false;
numeroDeFuegos = 0;
}
public void setEsIndependiente(boolean valorEsIndependiente){
esIndependiente = valorEsIndependiente;
}
public void setNumeroDeFuegos(int valorNumeroDeFuegos){
numeroDeFuegos = valorNumeroDeFuegos;
}
public boolean getEsIndependiente(){return esIndependiente;}
public int getNumeroDeFuegos(){return numeroDeFuegos;}
}
en vez de:
public class CocinaCasa{
private boolean esIndependiente;
private int numeroDeFuegos;
public CocinaCasa(){
esIndependiente = false;
numeroDeFuegos = 0;
}
public CocinaCasa(boolean valorEsIndependiente, int valorNumeroDeFuegos){
esIndependiente = valorEsIndependiente;
numeroDeFuegos = valorNumeroDeFuegos;
}
public void setEsIndependiente(boolean valorEsIndependiente){
esIndependiente = valorEsIndependiente;
}
public void setNumeroDeFuegos(int valorNumeroDeFuegos){
numeroDeFuegos = valorNumeroDeFuegos;
}
public boolean getEsIndependiente(){return esIndependiente;}
public int getNumeroDeFuegos(){return numeroDeFuegos;}
}
No me funciona los constructores en el código del objeto "Casa". Como que tiene que haber un constructor que se le pasan los valores de los atributos por parametros, en las clases usadas, para que funcione también el constructor de los parámetros en la clase que usa.
No sé si me he explicado bien. Creo que mejor lo veréis con los códigos que os he puesto antes. Lo mismo pasa con el código de la clase "SalonCasa". Si le quito el constructor que usa parámetros, tampoco me funciona el constructor con parámetros en la clase "Casa".
Gracias