Los setters no funcionan
Frecuentes
Visto 115 veces
1
public class Shape{
public int xPos = 10;
public int yPos = 20;
Shape(){
}
public int getXpos(){
return xPos;
}
public void setXpos(int x){
this.xPos = x;
}
public int getYpos(){
return yPos;
}
public void setYpos(int y){
this.yPos = y;
}
}
public class Shape1 extends Shape{
Shape1(){
xPos = 100;
yPos = 200;
}
}
public class Test{
public static void main(String[] args) {
Shape1 shape1 = new Shape1();
System.out.println(shape1.getXpos());
}
}
¿Por qué obtengo 10 como resultado en lugar de 100?
1 Respuestas
4
Ahora mi pregunta es: ¿Por qué obtengo 10 como resultado en lugar de 100?
El código tal como se presenta imprime 100. La explicación más probable es que no está ejecutando el código que dice que está ejecutando. Esto podría suceder debido a errores de copiar y pegar, problemas de implementación, etc.
Una forma poco conocida pero desagradable en la que su código podría modificarse sutilmente para imprimir 10
es agregando void
en frente de Shape1
constructor de:
void Shape1() {
xPos = 100;
yPos = 200;
}
Esto transforma Shape1()
de un constructor a un método normal (que no se llama automáticamente durante la construcción del objeto).
Mi compilador acepta esta modificación y el código se imprime 10
cuando lo ejecuto.
De hecho, una vez tuve que lidiar con un error real causado por esto. Me tomó un poco de tiempo detectarlo, te lo aseguro.
contestado el 03 de mayo de 12 a las 18:05
void Shape1 () - ¿por qué cambia el constructor al método? haga público Shape1() en lugar de anular Shape1(). - Subhrajyoti Majumder
@Quoi: ¿Realmente leíste la respuesta? Todo su punto es que el código, tal como fue escrito, es correcto ... pero ese ligero cambio haría que se rompiera de la manera que describe la pregunta. Significar algo más o menos lo mismo que eso es probablemente lo que está mal con el código original (pre-pregunta) en primer lugar. - chao
amigo y está bien, estoy de acuerdo con lo que se describe (+1). Pero la pregunta era ¿Por qué obtengo 10 como resultado en lugar de 100? probablemente él/ella quiere la explicación, creo/ - Subhrajyoti Majumder
@Quoi: Y la explicación está justo ahí en la respuesta. Si el constructor se convierte accidentalmente en un método (pegando void
delante de él, por ejemplo), no se llamará durante la construcción, por lo que los campos no cambiarán de lo que la clase base estableció. - chao
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java or haz tu propia pregunta.
Esto ni siquiera es Java válido. Muéstranos el real código que está ejecutando. - NPE
¿Es una tarea para casa? Parece gustarle. Debe estar marcado como uno. - Łukasz Rżanek
No, solo estoy haciendo mi propio programa. - Anonymous181
¿Estás seguro de que ese es todo tu código? - Thomas
En realidad, no puedo reproducir, funciona bien para mí, con una salida de 100. - talnicolas