elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Malditas clases internas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Malditas clases internas  (Leído 1,421 veces)
4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Malditas clases internas
« en: 19 Enero 2016, 12:13 pm »

Tengo el siguiente codigo:
Código:
class ClaseExterna{
class ClaseInternaNoEstatica{}
static class ClaseInternaEstatica{}
}
Para crear un objeto de la ClaseExterna hago lo siguiente:
Código:
ClaseExterna obj = new ClaseExterna();
Despues si quiero crear un objeto de la ClaseInternaNoEstatica hago lo siguiente:
Código:
ClaseExterna.ClaseInternaNoEstatica obj2 = obj.new ClaseInternaNoEstatica();
Consecuentemente tambien puedo crear un objeto de la ClaseInternaNoEstatica de la siguiente forma:
Código:
ClaseExterna.ClaseInternaNoEstatica obj2 = new ClaseExterna().new ClaseInternaNoEstatica();
Ahora bien, si la clase interna es estatica, y al ser interna se considera un miembro del mismo al igual que sus atributos y métodos, entonces no debería de haber problema si creo un objeto de esa clase interna de la siguiente forma:
Código:
ClaseExterna.ClaseInternaEstatica obj = ClaseExterna.new ClaseInterna();//Error de compilación
Sin embargo da error. ¿Por qué? ¿Por qué para crear un objeto debe ser, sin embargo, de la siguiente forma?
Código:
ClaseExterna.ClaseInternaEstatica obj = new ClaseExterna.ClaseInternaEstatica();

Otra duda: cuando implemento una clase interna (tanto si es estatica como si no, da lo mismo) y trato de acceder a un atributo privado del mismo desde la clase externa no da error. ¿Por qué?

Código:
class ClaseExterna{
class ClaseInterna{private int atributoInterno = 7;}
int atributoExterno = new ClaseInterna().interna;//No da error de compilación
}
De echo, el error solo me lo da cuando trato de acceder a ese atributo privado desde fuera de la clase externa.
Entiendo que la clase interna pueda acceder a los miembros de la clase externa aunque sean privados, pero no entiendo por qué se puede hacer también lo contrario.


En línea

0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Malditas clases internas
« Respuesta #1 en: 19 Enero 2016, 18:56 pm »

Ahora bien, si la clase interna es estatica, y al ser interna se considera un miembro del mismo al igual que sus atributos y métodos, entonces no debería de haber problema si creo un objeto de esa clase interna de la siguiente forma:
Código:
ClaseExterna.ClaseInternaEstatica obj = ClaseExterna.new ClaseInterna();//Error de compilación
Sin embargo da error. ¿Por qué? ¿Por qué para crear un objeto debe ser, sin embargo, de la siguiente forma?
Código:
ClaseExterna.ClaseInternaEstatica obj = new ClaseExterna.ClaseInternaEstatica();

Te da un error en parte porque la clase "ClaseInterna" no existe, bueno dejando eso a un lado, con la sintaxis que utilizas, imagina que hubiera más clases con el mismo nombre, al no usar "." sería difícil saber a qué clase haces referencia. Más legible es "new ClaseExterna.ClaseInternaEstatica();".


Otra duda: cuando implemento una clase interna (tanto si es estatica como si no, da lo mismo) y trato de acceder a un atributo privado del mismo desde la clase externa no da error. ¿Por qué?

Código:
class ClaseExterna{
class ClaseInterna{private int atributoInterno = 7;}
int atributoExterno = new ClaseInterna().interna;//No da error de compilación
}
De echo, el error solo me lo da cuando trato de acceder a ese atributo privado desde fuera de la clase externa.
Entiendo que la clase interna pueda acceder a los miembros de la clase externa aunque sean privados, pero no entiendo por qué se puede hacer también lo contrario.

Eso es algo muy normal, una clase puede ver todo lo que tiene. Por ejemplo tu tienes permisos para saber todo sobre tu mente y cuerpo, pero no tienes todos los permisos necesarios para saber todo sobre otras personas.


« Última modificación: 19 Enero 2016, 18:58 pm por 0xFer » En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda clases internas vb.net
.NET (C#, VB.NET, ASP)
Senior++ 4 3,234 Último mensaje 28 Febrero 2012, 21:34 pm
por Senior++
El director de Paypal: "En cinco años desaparecerán las malditas contraseñas" « 1 2 »
Noticias
wolfbcn 15 3,840 Último mensaje 16 Mayo 2014, 12:24 pm
por Gh057
MALditas ventanas emergentes
Seguridad
roxie 7 3,098 Último mensaje 15 Junio 2014, 17:35 pm
por alkage
Duda sobre clases internas
Java
JonaLamper 1 1,697 Último mensaje 5 Abril 2015, 21:03 pm
por Usuario Invitado
[Duda]Uso de clases internas
Java
PabloPbl 3 1,678 Último mensaje 14 Abril 2015, 00:32 am
por PabloPbl
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines