elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 01:23  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  acceso a distintos metodos sobrescritos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: acceso a distintos metodos sobrescritos  (Leído 1,316 veces)
kasiko

Desconectado Desconectado

Mensajes: 191



Ver Perfil
acceso a distintos metodos sobrescritos
« en: 27 Junio 2011, 19:26 »

Tengo una duda,

Supongamos que tenemos este codigo:
Código:

class A{
    void imprimeA(String s){
        System.out.println("A: "+s);
    }
}

class B extends A{

   
     void imprimeAb(String s){

        System.out.println("B: "+s);
    }
}

class C extends B{

    @Override
     void imprimeA(String s){


        System.out.println("C: "+s);
    }
}
public class herencias extends C{
    public static void main(String[] as){
        A h= new C();
        h.imprimeA("antonio");
         h=(B)h;

       
           ((C) h).imprimeAb("juan");
            ((A)h).imprimeA("kiko");


    }

}




- Se que java va recorriendo de abajo hacia arriba los metodos y atributos heredados. Pero me preguntaba ¿como se puede invocar el metodo de la clase A, segun el codigo que he puesto?


En línea

Nos vemos...

Valkyr


Desconectado Desconectado

Mensajes: 632


Divide y vencerás


Ver Perfil
Re: acceso a distintos metodos sobrescritos
« Respuesta #1 en: 28 Junio 2011, 16:52 »

La forma más evidente:

Código
A prueba = new A();
prueba.imprimeA("PRUEBA");
 

xD. Otra forma, sin cambiar el código, no se me ocurre ninguna la verdad. Y eso de que java los recorre de abajo arriba...mejor dicho sería decir: java ejecuta los métodos por ligadura dinámica, sin embargo, los métodos los hace por la parte estática. (sí la memoria no me falla).

Saludos.


En línea

kasiko

Desconectado Desconectado

Mensajes: 191



Ver Perfil
Re: acceso a distintos metodos sobrescritos
« Respuesta #2 en: 28 Junio 2011, 18:51 »

pero esta sentencia no deberia funcionar?

Código:
((A)h).imprimeA("kiko");

En línea

Nos vemos...

klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
Re: acceso a distintos metodos sobrescritos
« Respuesta #3 en: 28 Junio 2011, 23:47 »

Lo que tu estas haciendo se llama casting, si kieres llegar a la clase A haciendo casting no debes saltarte ningun eslabon de la herencia es decir, tienes C, pasas a B, luego a A, pero como dicen aqui arriba ¿no es mas sencillo instanciar la clase A y acceder directamente?

[Cast]

Saludos  ;)
En línea

ShotgunLogic

Desconectado Desconectado

Mensajes: 225


Claws so razor sharp


Ver Perfil
Re: acceso a distintos metodos sobrescritos
« Respuesta #4 en: 29 Junio 2011, 11:06 »

pero esta sentencia no deberia funcionar?

Código:
((A)h).imprimeA("kiko");



Lo voy a explicar que seguro que así todos nos aclaramos.

Java tiene dos "tipos" de clases: estáticas y dinámicas. Las clases estáticas son las que se ponen al declarar el objeto, y que son las que mirara el COMPILADOR de Java. Las dinámicas son las que pones al crear el objeto(que es distinto que declararlo), y que son las que funcionarán al ejecutar el programa.

Pasa que por ejemplo, la clase C, que deriva de A, puede hacerse así:

Código:
A obj = new C();

De hecho es correcto hacerlo, y se usa mucho a la hora de si quisieses por ejemplo hacer un Array con objetos de clase A, pero siendo más específico meter un objeto de clase C.

Hasta ahí bien, pero con el cast lo que haces es decirle al COMPILADOR: tú tranquilo, que aunque su clase estática sea la que sea, este objeto es de esta clase(vamos, tienes que estar seguro que su clase dinámica va a ser siempre la que indicas al castear, porque si no te puede dar errores de ejecución, o que el programa no funcione como esperabas).

Con lo cual, lo que estas haciendo es decirle al compilador que tu clase es A, algo que ya sabía por que su clase estática era esa. Pasa que a la hora de ejecutarlo, como su clase dinámica es otra, va a empezar a "buscar el método por abajo", y se va a encontrar primero el de la C en el caso de que sue clase dinámica sea esta.

Con lo cual simplemente podrías llamar al método de la clase A con un objeto de tipo estático A o B, ya que el C siempre te lo va a sobreescribir, por mucho que castees. Hay que darse cuenta que el casteo solo sirve para que el compilador no te tire errores, y hay que tener mucho cuidado con él porque puede romperte un programa.

Espero haberme explicado bien, un saludo! :laugh:

En línea

The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
K es eso de los distintos tipos de particiones??
GNU/Linux
Ninrodel 1 628 Último mensaje 27 Diciembre 2002, 19:17
por el-brujo
Compatibilidad con distintos programas
Desarrollo Web
Diariovoz 2 532 Último mensaje 6 Enero 2004, 09:58
por Diariovoz
Crear DVD con distintos SO
Software
Cesc 1 376 Último mensaje 18 Febrero 2006, 11:57
por T0rete
metodos de acceso a iis w2000 server....?
Dudas Generales
*-.Sub-Vorbio.-* 1 246 Último mensaje 17 Abril 2006, 00:41
por jysgm
URGENTE¡¡Como recuperar archivos sobrescritos
Dudas Generales
tereld 2 781 Último mensaje 8 Junio 2006, 12:35
por Kasswed
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines