Este artículo describe la herencia de la programación orientada a objetos de Java. Compártelo para su referencia, como sigue:
Herencia: una clase especial tiene todas las propiedades y comportamientos de una clase general.
Beneficios de herencia:
1. Reutilización de código mejorado
2. Que la clase tenga una relación con la clase antes, y solo con esta relación puede haber características polimórficas. La herencia es la relación entre una clase y una clase anterior.
Notas:
1. Java solo admite una herencia única, no una herencia múltiple. Debido a que la herencia múltiple tiene riesgos de seguridad: cuando múltiples clases principales definen la misma función, pero las funciones son diferentes, la subclase no sabe cuál ejecutar.
2. Cuando una clase infantil hereda la clase principal, hereda todos los métodos y propiedades de la clase principal y puede usarse directamente.
3. Java admite la herencia de múltiples capas, es decir, la relación entre nieto-hijo-hijo
gramática:
[Modificador de clase] El nombre de la subclase de clase extiende el nombre de la clase principal {Declaración;}Por ejemplo:
clase PSerson {int Age; Nombre de cadena; public void speak () {System.out.println ("¡Hola mundo!"); }} // heredar la clase de persona, heredar todos los métodos y atributos del estudiante de clase matriz extiende PSerson {public void study () {System.out.println ("¡Buen estudio!"); }} // heredar la clase de persona, heredar todos los métodos y atributos del trabajador de clase matriz extiende PSerson {public void work () {System.out.println ("¡Buen trabajo!"); }}Cómo usar funciones en un sistema de herencia (ver documentación de API):
Verifique las funciones de la clase principal y cree objetos de subclase para usar funciones
Estos tres escenarios a menudo se encuentran durante el proceso de herencia:
1) Variable con el mismo nombre
1. Si una subclase tiene una variable miembro no privada del mismo nombre, la subclase accede a la variable de esta clase y usa esto; La subclase accede a la variable del mismo nombre en la clase principal y usa Super.
2. Esto representa una referencia al objeto de esta clase
3. Super representa una referencia al objeto de clase principal (el uso es el mismo que este)
2) Funciones con el mismo nombre
1. Si una subclase aparece una función exactamente igual que la clase principal (el nombre de la función y los parámetros son los mismos), cuando el objeto de subclase llama a la función, el contenido de la función de subclase se ejecutará. , las funciones de la clase matriz se sobrescribirán (también llamada reescritura).
2. Reescribe la definición: cuando la subclase hereda la clase principal, sigue las funciones de la clase principal y ingresa a la subclase. Sin embargo, aunque la subclase tiene esta función, el contenido de la función es inconsistente con la clase principal. En este momento, no hay necesidad de definir una nueva función, pero use la función de anulación, retenga la definición de función de la clase principal y reescribe el contenido de la función.
3. Notas sobre la reescritura (sobrescribir):
<1> Subclases anule la clase principal. Debe asegurarse de que los permisos de la clase infantil sean mayores o iguales a los permisos de la clase principal antes de la herencia, de lo contrario la compilación fallará. (Público> No escribas palabras clave retóricas> Privado)
<2> estática solo puede cubrir estática
<3> Overload: solo mire la lista de parámetros de la función con el mismo nombre y reescribe: el método de clase principal infantil debe ser exactamente el mismo (nombre de la función y lista de parámetros)
clase fu {// public void show () Cuando la clase principal es show (), será exactamente lo mismo que la función de subclase. La función de programa de la clase principal se reescribirá public void show (nombre de cadena) // La función de programa de la clase principal es diferente de la subclase (la lista de parámetros es diferente), por lo que la función de programa de la clase principal no se reescribirá {System.out.println (nombre); }} La clase Zi extiende FU {public void show () {System.out.println ("Zi"); }} clase Jicheng {public static void main (string [] args) {zi z1 = new Zi (); z1.show ("nihao"); // La función de espectáculo de la clase principal se llamará}}3) Constructor
1. Al inicializar el objeto de subclase, el constructor de la clase principal también se ejecutará, porque la primera línea del constructor de la subclase tiene una declaración implícita super () por defecto.
2. Super () accederá al constructor de los parámetros huecos en la clase principal, y la primera línea de todos los constructores en la subclase es super () por defecto
3. La razón por la cual las subclases deben acceder al constructor de la clase principal
<1> Debido a que la subclase de datos en la clase principal se puede obtener directamente, la subclase debe ver primero cómo la clase principal inicializa los datos. Por lo tanto, cuando la subclase se inicializa, primero accede al constructor de la clase principal de forma predeterminada.
<2> Si desea acceder al constructor formulado por la clase principal o el constructor cuya clase principal no tiene parámetros vacíos, puede formularlo definiendo manualmente la súper declaración.
<3> Por supuesto, la primera línea del constructor de la subclase también se puede especificar manualmente para acceder al constructor de esta clase, pero al menos uno de los constructores en la subclase accederá al constructor de la clase principal.
clase fu {nombre de cadena; int Age; Fu () {System.out.println ("Hola fu");} fu (nombre de cadena) {System.out.println (nombre); } Fu (name de cadena, int age) {this.name = name; this.age = edad; System.out.println ("Nombre:"+nombre+", edad:"+edad); }} La clase Zi se extiende FU {//zi() (System.out.println("hello zi ");} Por defecto, el constructor sin parámetros zi () de la clase principal se llamará primero. Super ("Zhangsan", 20); // Use manualmente la súper declaración para especificar el constructor de la clase principal para obtener información no privada de la clase principal System.out.println (nombre+"::"+edad); }} prueba de clase {public static void main (string [] args) {zi z1 = new Zi (); }}Ejemplo de excepción del constructor:
Escriba los resultados del programa
clase Super {int i = 0; public Super (String S) {i = 1; }} La demostración de clase se extiende Super {Public Demo (String S) {i = 2; } public static void main (string [] args) {demo d = new demo ("sí"); System.out.println (DI); }} // La compilación falló porque el constructor con parámetros vacíos faltaba en la clase principal. // o la subclase debe especificar que el constructor en la clase principal se llame a través de la súper declaración.Reescribir y sobrecargar ejemplos:
Class demo {int show (int a, int b) {return 0;}}Las siguientes funciones pueden existir en una subclase de demostración.
A.Public int show (int a, int b) {return 0;} // sí, sobrescribir.
B.Private int show (int a, int b) {return 0;} // No, los permisos no son suficientes.
C.Private int show (int a, long b) {return 0;} // Sí, no es la misma función que la clase principal. Ninguna cobertura es equivalente a la sobrecarga.
D. Public Short Show (int a, int b) {return 0;} // no, porque esta función no puede aparecer en la misma clase que la función dada, o en la clase principal infantil.
E.Static int show (int a, int b) {return 0;} // no, estática solo puede sobrescribir estática. <br> <br> Entonces, la subclase permite reescribir y sobrecargar.
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Introducción y tutorial avanzado sobre la programación orientada a objetos de Java", "Tutorial sobre la estructura de datos de Java y el algoritmo", "Resumen de la operación de Java DOM Node Node", "Summary of Java File and Directory Operation Skilly" y "Summary of Java Cache Skitch" Habilidades "
Espero que este artículo sea útil para la programación Java de todos.