Duda sobre hilos

Iniciado por arts, 5 Noviembre 2013, 18:14 PM

0 Miembros y 1 Visitante están viendo este tema.

arts

Tengo una duda en un ejemplo el cual me cuesta mucho ver.
No entiendo esta línea que se realiza dentro de static void main(String[] args): Throw hilo = new Mihilo("hilo1");
Se supone que Mihilo tiene un extends de Throw con un constructor que recibe una String y un método run() que muestra un mensaje, y no entiendo como al hacer una instancia del tipo Throw llamada hilo instanciándose a Mihilo y pasándole la cadena funciona. No entiendo porque esto no da problemas, es decir si pongo Int x = new String("pepe"); se entiende que pepe no es un número por lo tanto el espacio de memoria de int es imposible que pueda acceder a String(); y al parecer en el ejemplo de Thorw hilo = new Mihilo("hilo1); no da ningún problema :/
¿ Por que es compatible esto último ?


egyware

#1
Creo que tu pregunta va más dirigida con lo que ocurre con la memoria, más que con la herencia en sí.

Bueno como bien sabes existen los tipos primitivos (int, char, byte) y los objetos.
Enfocándonos a los objetos, estos no son como los structs en C. Para partir todos los objetos en realidad son punteros (nada nuevo si vienes de C o C++) entonces sin aplicar ninguna seguridad ni comprobar tipos aplicaciones como estas son completamente validas String a = new Integer(10) o Integer b = new String("hola") esto es debido porque ambos son punteros y su tamaño en memoria son 4 bytes (depende arquitectura el tamaño del puntero). Sin embargo, el área de la memoria que apuntan puede ser diferente.  Esto es solo un ejemplo actualmente y desde siempre hacer que un objeto tipo String apunte a un objeto Integer es imposible.

¿Que pasa con la herencia? En la herencia, los objetos de clases padres pueden apuntar (como punteros) a objetos de las clases hijos (pero no viceversa). Esto es debido porque la clase hijo incluye a la clase padre.

Bueno espero que te haya quedado un poco más claro. Si no seria bueno que estudies más sobre encapsulamiento y herencia.

Saludos

arts

#2
Vaya era algo que me había imaginando pero no estaba seguro, por lo que entiendo que con Throw x; puedo realizarlo porque tengo la herencia(extends Throw) en mi clase Mihilo (clase hija) y con el puedo acceder a todo lo que contiene la clase Throw y con el new Mihilo("hola") ¿ es hacia donde apunta verdad ?, en este caso relleno un espacio de memoria con el constructor de la clase Mihilo ¿ no ?, por lo que con x tendría por un lado acceso a métodos/funciones/variables de Throw y a su vez contiene una cadena del constructor verdad ?.

egyware

Si, estás en lo cierto.

Ahora no por ser clase hija, no siempre se podrá acceder a todo de la clase padre. Existen unos modificadores que definen la privacidad del objeto. Si una variable tiene un modificador en private, la clase hija nunca podrá acceder a este valor (por lo menos no directamente).

Espero que te haya quedado claro.

arts