Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





duda ambitos java

Iniciado por Güarmigue, 14 de Junio de 2007, 01:05:19 PM

« anterior - próximo »

Blankness

Cita de: "Güarmigue"Y además parece que no tiene una respuesta sencilla cuando nadie da con ella...

La respuesta ya te la ha dado Sés...  :wink:

Saludos

Güarmigue

Me refería un poco más al porqué que al como, ya que el como ya estaba comprobado empíricamente... como le comenté a sés ya había probado lo del casting y había manejado las dos variables dentro de la clase B, la duda me surge en porqué la primera variable que toma es la de A cuando en teoría debería ser la de B...

Pero ok, me conformo con saber que es así y ya está, lo tendré en cuenta a partir de ahora :) Gracias a todos por vuestras respuestas!!  :D
url=http://deadchannel.blogsome.com]Dead Channel[/url] - Blog de informática, juegos, tortugas y lo que me viene dando en gana ;P

lord_taran

Probablemente voy a decir obviedades que sabes de sobra, pero por si acaso te enseño un par de variaciones:
class A {
 
  char c = 'A';
 
  static void f(){
     System.out.println("A");
  }

  void g(){
     this.f();
  }

}

class B extends A{

  char c = 'B';
  char d = 'N';
 
  static void f(){
     System.out.println("B");
  }

  void h(){
     System.out.println("PEPE");
  }
}

public class C {
  public static void main(String[] args){
     A a = new A();
     B b = new B();
     A c = b;
     B d = (B)c;
     
     System.out.println(a.c);
     System.out.println(b.c);
     System.out.println(c.c);
//     System.out.println(c.d);
     System.out.println(d.c);  Si descomentamos peta
  }
}


La salida es:
A
B
A
B

Y si descomentaramos la línea que intenta acceder a la variable definida en la subclase pero no en la superclase, daría error de compilación, ya que por mucho que estemos asignando un objeto de tipo B, c sigue siendo de tipo A.

Como digo probablemente sea un mensaje que no te aporte nada, pero weno :P
n saludo!
Lord Taran
Las Noyas de Taran

Güarmigue

Eso no se me había ocurrido, así queda más claro, aunque es algo que me sigue sin gustar que ocurra :P pero supongo que será útil en algunos casos...

No es que no me aporte lord_taran, creo que me he expresado mal. Los otros casos los había probado, me aportan desde el punto de vista que confirman mis teorías (hombre, se vé que si devuelve una A, es que está pillando la variable de la superclase...), pero no me traen una explicación. Yo quería saber por qué, soy duro para los actos de fé   :twisted:
url=http://deadchannel.blogsome.com]Dead Channel[/url] - Blog de informática, juegos, tortugas y lo que me viene dando en gana ;P

shephiroth

Lo he estado pensando (si algunas veces pasa) y hemos sido (me incluyo) un poco torpes. si el objeto c es de tipo A, SIEMPRE accedera a A.c. independientemente de que B tenga otra variable que se llame de igual manera. Si quieres que B utilice la variable de A y por lo tanto que te de el resultado A B B lo que tienes que hacer es usar la herencia y no declararla en B, que ya la esta heredando de A. De esta manera (y solo de esta) al tener A c = b, c.c dara B y no A.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.