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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Aclaración de conceptos teóricos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Aclaración de conceptos teóricos  (Leído 5,861 veces)
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Aclaración de conceptos teóricos
« en: 3 Febrero 2015, 21:49 pm »

1.- ¿Qué hace (y para qué sirve) exactamente un método estático?

2.- ¿Por qué un método estático no puede ser abstracto? (de ahí que las interfaces no puedan tener métodos estáticos).

3.- Al igual que un método estático únicamente puede modificar un atributo estático, ¿un método no-estático únicamente puede modificar un atributo no-estático?

4.- ¿Por qué una interfaz solo puede tener atributos estáticos o finales (constantes)?


Gracias, seguiré estudiando  :silbar:


En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #1 en: 3 Febrero 2015, 22:05 pm »

Un método estático es también llamado "método de clase"
Los métodos estáticos no necesitan de un objeto para ser utilizado, y por esta razón tu puedes acceder a este método utilizando el nombre de la clase:

Código
  1. Clase.metodoEstatico();

Un método estático solo puede modificar atributos estáticos ya que de alguna manera ambos no pertenecen al objeto (si creas 10 objetos con un atributo estático, los 10 objetos tendrán el mismo valor en aquel atributo, si cambias ese valor en uno de los objetos, se cambiara en todos)

En otras palabras, las variables de clase solo pueden ser modificadas por métodos de clase, de hecho, tu no deberías poder usar la palabra this. para acceder a una variable estática.

En respuesta a tu pregunta 3 es muy deducible el porque. La razón por la cual no puedes crear un método estático y abstracto es porque los métodos estáticos se utilizan sin necesidad de un objeto, y si no creas un objeto de una clase abstracta nunca podrás definir sus métodos estáticos, por lo tanto es imposible el utilizar un método estático y abstracto, ya que simplemente no esta definido. (espero me entiendas)

Respecto a tu ultima pregunta, solo puedo decir que todo en una interface es publico, y por esa razón es recomendable que si declaras algún atributo tiene que ser por  recomendación final (regla de encapsulamiento). Si un atributo es publico, sera accesible desde cualquier lugar, por lo tanto lo mejor de todo es que esta variable sea FINAL de esta manera no tendrás problemas en que cambien el valor desde cualquier otro lugar. Pero según se no es obligatorio el que sea estático o final.



Modifico, efectivamente tienes razón tiene que ser public estatico y final... la verdad no sabría que decirte, pero según se las interfaces se utilizan siempre para redefinir métodos (no he tenido necesidad de utilizar variables)


« Última modificación: 3 Febrero 2015, 22:24 pm por Nac-ho » En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #2 en: 3 Febrero 2015, 22:28 pm »

1) Un método estático solo puede manejar datos estáticos porque un método estático existe desde que el ClassLoader carga su clase. Una variable no estática está asociada con la existencia de un objeto. Por lo tanto, si los métodos estáticos "siempre están allí", ¿como pueden tener referencias de objetos (al cargarse la clase por medio del ClassLoader al levantar la aplicación) que aún no existen?

2) abstract quiere decir: "No implementa funcionalidad" y static dice "Aquí hay funcionalidad todo el tiempo sin necesidad de un objeto". Por lo que si haces un método static abstract también, no tendría sentido. Se contradice.

3) No. Un método no estático puede manipular datos estáticos sin problemas.

4) Los atributos de una interfaz son public, static y final porque una interfaz no puede ser instanciada directamente. El valor de su variable debe ser asignado en un contexto estático en caso no existan instancias que sobre-escriban la variable, por ésta razón también son constantes, porque se asegura que tengan algún valor en caso que ninguna implementación la sobre-escriba.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #3 en: 3 Febrero 2015, 22:35 pm »

Mucho mejor.

Thx.
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #4 en: 4 Febrero 2015, 13:09 pm »

Sigo aquí con las dudas.

Dado el siguiente código:



(a): incorrecto.
(b): correcto.
(c): correcto.
(d): correcto.

¿Estaría bien?
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #5 en: 4 Febrero 2015, 13:25 pm »

De donde sacas eso  :huh:

Las alternativas B y D supongo son correctas.

Ya en la alternativa C ya se esta implementado L2 gracias a la clase D entonces no le veo el caso de reimplementar.

Y bueno la A no porque estas heredando una interfaz. /* No tomen en cuenta esto, se me fue la cabeza   :rolleyes:  :silbar:*/
« Última modificación: 4 Febrero 2015, 14:25 pm por Nac-ho » En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #6 en: 4 Febrero 2015, 14:01 pm »

Ya en la alternativa C ya se esta implementado L2 gracias a la clase D entonces no le veo el caso de reimplementar.

Aún así, creo que sería correcto que Y vuelva a implementar la interfaz I2 (haciendo sobreescritura de métodos, por ejemplo).

Y bueno la A no porque estas heredando una interfaz.

No te entiendo. La clase W es una subclase de la clase A y de la clase B (aquí no hay interfaces). La respuesta de porqué es incorrecto, creo que es porque en Java está prohibido la herencia múltiple, es decir, una subclase no puede tener dos superclases.

En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #7 en: 4 Febrero 2015, 14:19 pm »

Sry. Lei mal, tienes razon, es incorrecto porque no puede haber multi herencia (lo lamento estaba en otra  ;D)  :-X (que vergüenza, lo lamento en serio)

Y si, pero no es necesario reimplementar, solo basta con redefinir los métodos. De hecho supongo que si reimplementas y no redefines los métodos aun asi no te molestara (ya que fueron definidos por la super clase) por eso no le veo el caso al implements (no te digo que no funcione, funcionara y no te dará error, pero no le veo la utilidad) quizás haga mas entendible el código ??  :huh:
« Última modificación: 4 Febrero 2015, 14:27 pm por Nac-ho » En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #8 en: 4 Febrero 2015, 14:19 pm »

A) Java no soporta herencia múltiple, por lo tanto, no es una opción válida.

B) La clase C ya implementa L1, por lo que las subclases de C también heredan la implementación.

C) Lo mismo. Lo válido sería Y extends D implements L1. (L2 ya fue implementado por D).

D) Z implementa L1 y L2. Ésta es la opción más coherente.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Aclaración de conceptos teóricos
« Respuesta #9 en: 4 Febrero 2015, 14:36 pm »

Pero aunque ya lo implemente, el código sería correcto, no?
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una aclaración
Diseño Gráfico
noob_Setup 2 1,674 Último mensaje 7 Diciembre 2005, 15:09 pm
por noob_Setup
Aclaracion
Juegos y Consolas
unliketec 3 2,418 Último mensaje 25 Noviembre 2009, 14:32 pm
por Ariath
aclaración de algunos conceptos y dudas sobre hacking
Wireless en Windows
radi0cabeza 4 3,135 Último mensaje 2 Enero 2013, 17:31 pm
por darkvidhack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines