Una característica de la herencia es que la subclase no puede acceder a la privada campo o privada método de la clase padre . Por ejemplo, la clase Estudiante no puede acceder a los campos de nombre y edad de la clase Persona :
class Person {
nombre de cadena
privada ;
int edad privada ;
}
clase Estudiante extiende Persona {
cadena
pública hello () {
return "Hola," + nombre; // Error de compilación: No se puede acceder al campo de nombre } }
Esto debilita el papel de la herencia. Para permitir que las subclases accedan a los campos de la clase principal, necesitamos cambiar de privado a protegido . Se puede acceder a los campos modificados con protected por subclases:
class Person {
nombre de cadena
protegido ;
int edad protegida ;
}
clase Estudiante extiende Persona {
Cadena
pública hola () {
devolver "Hola," + nombre; // ¡OKAY!
}
}
Por lo tanto, la palabra clave protegida puede controlar los derechos de acceso de campos y métodos dentro del árbol de herencia. Se puede acceder a un campo y método protegidos por sus subclases y subclases de la subclase. Explicaremos en detalle más adelante.
2. El uso de super
La palabra clave super representa la clase principal (superclase). Cuando la subclase se refiere al campo de la clase principal, se puede usar super.fieldName . P.ej:
clase Estudiante extiende Persona {
Cadena
pública hola () {
devolver "Hola," + super .nombre;
}
}
La ejecución del código anterior provocará errores de compilación, no se puede llamar al método de construcción del estudiante y al método de construcción Person.
Análisis: Cualquier método de construcción de clases debe primero construir el método de construcción de clases padre. Si el método de construcción de la clase padre no se llama explícitamente, el compilador agregará automáticamente un super () para nosotros, por lo que el método de construcción de la clase Student es en realidad así
Entonces el problema es que la clase padre, la clase Person, no tiene un constructor predeterminado, y la subclase, Student, debe mostrar el constructor después de llamar a la sobrecarga, es decir
La escritura en la clase de Estudiantes es
Subiendo ... re-subida cancelada
Resumen: Si la clase padre no tiene un método de construcción predeterminado, la subclase debe llamar explícitamente a super () y proporcionar los parámetros para que el compilador pueda localizar un método de construcción adecuado. Al mismo tiempo, la subclase no heredará ningún método de construcción de la clase principal. El método de construcción predeterminado de la subclase es generado automáticamente por el compilador, no heredado