Si hiciera lo siguiente:
Código
Tendria que importar la clase A,B y C. Sin embargo, si yo hiciera esto:
A a = new A(); B b = a.getB(); C c = b.getC();
Código
No tendria que importar la clase B. ¿Por que?
A a = new A(); C c = a.getB().getC();
Si es porque la clase B ya importa la clase C, entonces ¿Por que en el primer caso tengo que importarla si ya viene incluida al incluir C?
EDIT:Voy a poner la definición de las clases A, B y C para que me entendáis mejor:
Código
package paquete_a; import paquete_b.B; public class A{ public B getB(){ return new B(); } }
Código
package paquete_b; import paquete_c.C; public class B{ public C getC(){ return new C(); } }
Código
package paquete_c; public class C{ //Esta clase no tiene nada }
Código
package test; import paquete_a.A; import paquete_b.B; import paquete_c.C; public class Test_1{ A a = new A(); B b = a.getB(); C c = b.getC(); } }
Código
EDIT 2: Vamos a suponer que en C++ tenemos 3 archivos headers (esos que tienen la extension ".h"): Uno para la clase A, otro para la clase B y otro para la clase C, que basicamente seran iguales que las clases que acabo de mostrar, pero con la unica diferencia de que estan escritos en C++. Supongamos tambien que tenemos 2 archivos: test1.cpp y test2.cpp, que solo tienen un metodo main que simplemente hacen lo mismo que el metodo main de la clase Test_1 y Test_2 de java que he mostrado antes para ver como seria un ejemplo. Bueno pues en C++ cuando tu incluyes un archivo (En este caso, algo como #include A.h ó #include B.h) lo que realmente pasa es que se "inserta" tal cual el archivo encima de aquel en el que lo incluyes, de modo que si un archivo solo tiene el siguiente codigo:
package test; import paquete_a.A; //No es necesaria la importación de la clase B import paquete_c.C; public class Test_2{ A a = new A(); C c = a.getB().getC(); } }
Código
y otro incluye al anterior y solo tiene el siguiente codigo:
#include <stdio.h> int main(
Código
Compilará sin problemas y si ejecutamos nos mostrará el mensaje "Hola Mundo".
){ printf("Hola Mundo"); }
Ahora bien, si en el archivo que contiene la clase A incluyo el archivo de la clase B, y en el archivo que contiene la clase B incluyo el archivo que contiene la clase C, entonces el resultado seria el mismo que si hubiese creado un archivo con las 3 clases. Si en el archivo test1.cpp incluyo el archivo que contiene la clase A, entonces nisiquiera tendre que incluir el archivo que contiene la clase C para que el codigo equivalente de C++ de este trozo de codigo
Código
Se pueda compilar y ejecutar sin problemas. Sin embargo con java no pasa esto, sino que algunas veces (Como el primer caso que muestro arriba del todo) hay que importar la clase B, y en otros (Como el ejemplo de codigo que viene inmediatamente despues) no es necesario para ejecutar getC(). ¿Por que? ¿Por que unas veces si y otras veces no?
A a = new A(); B b = a.getB(); C c = b.getC();