miembros de la clase la comprensión del comportamiento polimorfismo

Abargil Yakubu:

Estoy frente a algunas dificultades al tratar de entender, lo que realmente sucede cuando se inicia una instancia de una clase hija.

public class A { 
2.      public int x, y; 
3.      public A () { x=1; y=2; }
4.      public int getx () { return x; }
5.  }
6.  public class B extends A { 
7.      public int x, z; 
8.      public B () { super(); x=3; y=4; z=5; }
9.      public int getx () { return x; } 
10.     public int getz () { return z; } 
11. }
12. public class Prob1 { 
13.     public static void main (String[] args){
14.         A o1 = new A(); 
15.         A o2 = new B(); 
16.         B o3 = new B();
17.         System.out.println(o1.x);     
18.         System.out.println(o1.getx()); 
19.         System.out.println(o1.y); 
20.         System.out.println(o1.getz()); 
21.         System.out.println(o2.x); 
22.         System.out.println(o2.getx());
23.         System.out.println(o2.y); 

Me encanta aquí una explicación detallada de lo que está pasando aquí exactamente, pero lo principal que no puedo entender es por qué la línea '21' imprime el número 1, y la línea '23' imprime el número 4.

Eran :

El polimorfismo se aplica a los métodos, no a las variables de instancia.

Ambas líneas 21 y 23 se imprimen el valor de las variables de instancia de la clase A, ya que ese es el tipo de tiempo de compilación o2(a pesar de su tipo en tiempo de ejecución es B).

21. System.out.println(o2.x); 

El valor de A's xmiembro es 1(fijado por el constructor public A () { x=1; y=2; }).

23. System.out.println(o2.y); 

El valor de A's ymiembro es 4(fijado por el constructor public B () { super(); x=3; y=4; z=5; }).

Tenga en cuenta el Btiene una xvariable de instancia que los cueros Avariable 's del mismo nombre. Por lo tanto, B's constructor no cambia A' s xvariable 3. Por otra parte, Bno tiene una yvariable de instancia, por lo que y=4;cambia el valor de A's yvariable 4.

Por cierto, la línea 20 tiene un error de compilación. Tenía que comentar a cabo con el fin de ejecutar su código.

También nota que o2.getx()da un resultado diferente que o2.x, ya que getx()es un método anulado por clase B, de modo que devuelve B's variable de instancia x, cuyo valor es 3(ya que el tipo de tiempo de ejecución de o2es B).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=226946&siteId=1
Recomendado
Clasificación