Java es un lenguaje fuertemente tipado.
Las conversiones estándar y las promociones automáticas se aplican a los tipos primitivos.
La compatibilidad de tipos se aplica estrictamente.
Normalmente, una variable de referencia de una clase no puede hacer referencia a un objeto de otra clase.
Incluso si las clases X e Y son estructuralmente iguales, no es posible asignar una referencia de X a un objeto de Y porque los tipos son diferentes.
En general, una variable de referencia de objeto solo puede hacer referencia a objetos de su tipo.
La excepción a la imposición de tipos es que la variable de referencia de una superclase puede hacer referencia a objetos de cualquier subclase derivada de esa superclase.
Como Y se deriva de X, x2 puede recibir una referencia a un objeto de Y.
El tipo de variable de referencia, no el tipo de objeto al que hace referencia, determina los miembros a los que se puede acceder.
Cuando una referencia a un objeto de subclase se asigna a una variable de superclase, solo es posible acceder a los miembros definidos por la superclase.
En el ejemplo, x2 no puede acceder al miembro b de Y, ya que la clase X desconoce los miembros agregados por la subclase.
Las referencias de subclase asignadas a variables de superclase son comunes, especialmente cuando se llama a constructores en jerarquías de clases.
Las subclases pueden beneficiarse de constructores que toman un objeto de la superclase como parámetro, permitiendo la creación de copias de objetos.
En este programa, t2 se construye a partir de t1 y, por lo tanto, es idéntico.
Atención en este constructor de Triángulos:
// Construye un objeto a partir de otro.
Triángulo(Triángulo ob) {
súper(ob); // pasa el objeto al constructor de TwoDShape
estilo = ob.estilo;
}
Recibe un objeto de tipo Triángulo y lo pasa (a través de super) a este constructor TwoDShape:
//Construye un objeto a partir de otro.
DosDShape(DosDShape ob) {
ancho = ob.ancho;
altura = altura ob.;
}
El constructor TwoDShape() espera recibir un objeto de tipo TwoDShape.
El constructor de la subclase Triangle() le pasa un objeto de tipo Triangle.
Esto funciona porque una referencia de una superclase, como TwoDShape, puede hacer referencia a un objeto de una subclase, como Triangle.
Es aceptable pasar una referencia de un objeto de una clase derivada a un constructor de la superclase.
El constructor de la superclase, TwoDShape(), solo inicializa miembros que pertenecen a la clase TwoDShape, independientemente de los miembros adicionales de la subclase Triangle.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3