¿Por qué la referencia de la clase padre puede apuntar a una referencia a objeto de subclase subclase no puede apuntar a los objetos genéricos clase padre

Supongamos clase padre Fu, subclase que Zi, desde la perspectiva del objeto de memoria, que se supone Fu memoria cuenta variables de clase 2 M, clase Zi de la memoria para una variable 1M:

Fu f = new Fu (); // asignar memoria sistema 2M

z Zi = nuevo Zi (); // asignar memoria sistema 3M (2 + 1)

Debido a que la subclase tiene una referencia oculta al súper apuntará a la instancia de la clase padre, por lo que antes se subclase instanciable primera instancia de una clase padre, que será la primera implementación del constructor de la clase padre. Así que z puede llamar a la clase madre método.

Zi z1 = z; // z1 memoria 3M ese punto.

Fu f1 = (Fu) z; // En este punto será f1 memoria RAM 3M 2M, es decir, f1 simplemente apunta a una instancia de objeto de la clase padre en el Ejemplo z, se puede llamar a los métodos f1 clase padre ( 2 M almacenado en la memoria), el método (1 M almacenado en la memoria) no puede llamar subclase.

Zi z2 = (Zi) f; // Este código será reportada ClassCastException tiempo de ejecución porque la memoria f solamente 2 M, y las referencias subclase debe ser memoria de 3M, que no pueden ser convertidos.

Zi f1 z3 = (Zi); // frase ejecutando, entonces ese punto z3 3M f1 memoria es convertida por z desde encima, por lo que es la memoria de 3M, pero apunta en 2M 3M. la memoria, la conversión de tipos, se puede obtener toda 3M.

 

En ausencia de un tipo genérico de la clase clase, no todo nuevo. Tipo sólo se puede utilizar a su vez fuerte

Aquí es un caso de conversión de tipo

Object [] ins = {  
                 nuevo entero (0 ),  
                 nuevo entero (1 ),  
                 nuevo entero (2 ),  
                 nuevo entero (3 ),   
         };  
        Integer [] i = (entero []) ins;  

Cuando se ejecuta, el sistema informa 
Excepción en hilo "principal" java.lang.ClassCastException:  [Ljava.lang.Object; no se puede convertir a [Ljava.lang.Integer;

Si ha cambiado la forma en que a continuación:

  Object [] ins = {     
         nuevo entero (0 ),     
          nuevo entero (1 ),     
          nuevo entero (2 ),     
           nuevo entero (3 ),      
  };     
 Entero [] i = nuevo Entero [ins.length];  
 para ( int k = 0; k <ins.length; k ++ ) {   
    i [k] = Integer.parseInt (ins [k] .toString ());  
     System.out.println (i [k]);  
 }

¿Por Object [] array no puede convertirse en una fuerte matriz de enteros [] ¿verdad?

De hecho, Object [] matriz y Entero [] matriz y ninguna relación previa entre la relación de herencia, Integer [] es una subclase de objeto, no Object [] array y similares.

Object [] array es la clase de objeto .....

a su vez fuerte, entonces todavía tiene que ser uno de los fuertes a su vez de los elementos individuales.

 

----------------
enlace original: https://blog.csdn.net/lifewinnerforever/article/details/72801247

Supongo que te gusta

Origin www.cnblogs.com/skyblue123/p/12610641.html
Recomendado
Clasificación