Te lo decía, más que nada, que si pasas un parámetro al método que no lo cambies luego porque no te funcionará.
Da lo mismo poner:
public void setCocinaCasa(CocinaCasa valorCocina){cocina=valorCocina;}
o poner:
public void setCocinaCasa(CocinaCasa valorCocinaCasa){cocina=valorCocinaCasa;}
de las dos formas creas una variable nueva. Pero si te va mejor poner:
public void setCocinaCasa(CocinaCasa valorCocina){cocina=valorCocina;}
no hay ningún problema.
Sobre si es correcto, tu puedes definir el constructor de un objeto como quieras (pasándole o no parámetros). Pero después, haciendo el constructor de un objeto que utiliza como propiedades otros objetos, ese nuevo objeto lo tienes que crear de acuerdo con su contructor. Es decir, cuando defines el constructor del objeto "Casa", si incluyes en él un objeto de tipo "SalonCasa", ese objeto lo tienes que hacer igual como lo tienes es ese objeto (en este caso, como lo tienes en el objeto "SalonCasa"). Y si para contruir el objeto "SalonCasa" necesitas pasarle 2 parámetros (porque tienes así definido su contructor), se los pasas.
Sobre la "notación de puntos" tienes la definición en la entrega CU00632B del curso Java desde cero. Aquí te la dejo:
En el caso de un objeto Taxi, una invocación de un método podría ser taxi1.getDistrito(). Esta invocación devuelve una cadena, por lo que podríamos escribir: System.out.println (“El distrito del taxi 1 es “ + taxi1.getDistrito() );
Esta forma de invocar los métodos se denomina “notación de punto” porque se basa en escribir el nombre del objeto seguido de un punto y el nombre del método con los parámetros que procedan. La notación de punto es un aspecto básico de Java y otros lenguajes de programación.
Aplicado al nuestro caso, cuando hacemos el contructor del objeto "Casa" así:
public Casa(double valorSuperficie,String valorDirección,SalonCasa valorSalonCasa,CocinaCasa valorCocina){
superficie=valorSuperficie;
dirección=valorDirección;
salonCasa=new SalonCasa(valorSalonCasa.getNumeroDeTelevisores(),valorSalonCasa.getTipoSalon());
cocina=new CocinaCasa(valorCocina.getEsIndependiente(),valorCocina.getNumeroDeFuegos());
}
Lo que hacemos realmente aquí es decir que la variable "salonCasa" referenciará a un nuevo objeto de tipo "SalonCasa" y que ese objeto lo haremos mediante su constructor que necesita 2 parámetros. El primer parámetro lo haces invocando el método "getNumeroDeTelevisores()" sobre la variable "valorSalonCasa" que es de tipo "SalonCasa" y el segundo lo haces invocando "getTipoSalon()" sobre la variable "valorSalonCasa" que es de tipo "SalonCasa". Estos dos métodos lo que hacen es recuperar los valores de las propiedades del objeto "SalonCasa" cuando lo creaste. Por lo tanto, si pones en práctica esos objetos, antes de crear el objeto "Casa" tenías que haber creado el objeto "SalonCasa", porque si no, no podrás crear el objeto "Casa" porque no podrás crear el objeto "SalonCasa" dentro del objeto "Casa" puesto que no podrás pasarle los parámetros que necesita el objeto "SalonCasa" para su creación.
No te entiendo con lo qué quieres decir si un objeto se puede tratar como si fuera un tipo primitivo. En qué caso? Allí, por donde has visto la solución de este ejercicio habrá una constestación de algún moderador o un usuario colaborador que habrá comentado si hay errores.
No sé si te ha quedado claro. Cualquier duda, pregunta y con mucho gusto te contestaré (si lo sé, jejeje).
Saludos