Red de conocimiento informático - Aprendizaje de programación - Por qué utilizar la herencia en Java

Por qué utilizar la herencia en Java

Herencia: 1. Mejora la reutilización del código. 2. Existe una relación entre clases. El surgimiento de relaciones es el origen del polimorfismo.

Java solo admite herencia única y no admite herencia múltiple. Motivo: cuando el mismo método aparece en varias clases, la subclase no está segura de cuál llamar. De hecho, el método de la clase principal tiene un cuerpo de método. Pero Java admite la herencia multinivel. En la herencia multinivel, las definiciones de la clase principal son todas miembros globales. Qué representa: 1. La clase principal se extrae continuamente hacia arriba. 2. Dado que la clase principal incorpora el contenido único, cuando se utiliza un sistema de herencia, solo necesita consultar la clase principal de nivel superior para comprender las funciones básicas del sistema. (Consulte uno de los consejos de API) 3. Siempre que se cree el objeto de la mayor subclase, se puede aplicar el sistema de herencia.

Con el surgimiento de clases secundarias, las subclases pueden obtener miembros no privados de la clase principal porque tienen una referencia super de clase principal. Al igual que hay una participación en una subclase.

Anulación. Para funciones miembro, cuando aparece una función idéntica en las clases secundaria y principal, se producirá una operación de anulación. En tiempo de ejecución, se ejecutan los métodos de la subclase. Notas sobre la sobrescritura: 1. Cuando una subclase anula un método de clase principal, los permisos deben ser mayores o iguales que los de la clase principal. 2. La estática anula la estática. 3. La sobrescritura sólo ocurre en funciones.

¿Cuándo utilizar la superposición? Las funciones de la clase principal se pueden redefinir sobrescribiéndolas. Por ejemplo: modificar la función o actualizar la función. Nota: No defina nuevas funciones en subclases. También debería basarse en la declaración de la clase principal.

clase Demostración {

void show() {

System.out.println("Demo show"); /p>

}

main()

{ //Demo d = nueva Demo();

SubDemo d = nueva SubDemo();

d.show();

}

Dos años después. Para mejorar la mantenibilidad. Simplemente cree una subclase que herede Demo y anule algunas de las funciones que deben modificarse.

clase SubDemo extiende Demostración {

void show() {

System.out.println("subdemo show"); }

}

Super palabra clave: representa la aplicación de clase principal. La aplicación de super es exactamente igual que el uso de este.

El proceso de creación de instancias de la subclase: todos los constructores de la subclase regresan para acceder al constructor de parámetros vacíos en la clase principal. Esto se debe a que: La primera línea de cada constructor de subclase tiene una declaración super() implícita. Principio: la subclase hereda la clase principal y obtiene los miembros de la clase principal, por lo que la subclase primero debe aclarar cómo la clase principal inicializa estos miembros.

Si no hay un constructor de parámetros vacío en la clase principal, debe especificar el constructor al que se accederá a través de super o esta declaración en el constructor de la subclase.

¿Cuándo utilizar la herencia? La herencia se utiliza cuando existe una relación de propiedad (es una) entre clases. Si todos los miembros de la clase pueden ser propiedad de otra clase. Si se hereda. Si no, vea si existe la posibilidad de extracción ascendente clase A {

método void(){}

void function(){}

}

Con una clase B, B también necesita un método método().

En este momento, ¿puede B heredar A para obtener este método? ¿Porque esto no mejora la reutilización?

Entonces juzgue, ¿existe una relación entre B y A? No juzgaré. En este momento, se puede utilizar otra forma: ¿Tiene la aplicación B todas las funciones de A? No. B solo necesita un método método(). No es necesaria la función(). De esta forma no hay necesidad de herencia. Pero el método método() se definirá repetidamente en B. Entonces A y B tienen contenido único y tienen contenido de extracción ascendente. En este momento, A y B tienen otra clase principal C.

clase B {

método void(){}

show void(){}

}

Entonces el diseño final: clase C {

void método(){}

}

clase A extiende C {

void function (){}

}

clase B extiende C {

void show(){}

}

----------------------------------------------- --

palabra clave final 1, final puede modificar clases, métodos y variables. 2. Las clases modificadas finales no se pueden heredar, pero sí de otras clases. 3. Los métodos modificados finales no se pueden anular, pero pueden anular los métodos de la clase principal. 4. Las variables modificadas finales incluyen variables miembro, variables de clase y variables locales. Estas variables solo se pueden asignar una vez. 5. Cuando una clase interna es local, solo puede acceder a variables locales modificadas por final. En las especificaciones generales, una variable modificada por final es una constante y el nombre de la constante son todas letras mayúsculas.

------------------------------------------- ----- ----

Clase abstracta: Al analizar cosas, si se encuentra contenido esencial, se produce extracción ascendente. Habrá un caso especial en el que la declaración de la función sea la misma pero el cuerpo de la función sea diferente. Luego también puede extraerlo en este momento, pero solo se extrae la declaración del método, no el cuerpo del método. Entonces el método es un método abstracto. La forma de expresión del método abstracto: nombre de la función del tipo de valor de retorno abstracto (la lista de parámetros debe almacenarse en una clase abstracta);

Características: No se pueden crear instancias de clases abstractas con nuevas. Si desea crear un objeto, debe anular todos los métodos abstractos de la clase principal a través de la subclase antes de que la subclase pueda crear el objeto.

Cuando se define una clase abstracta, describe cosas como clases generales. Sin embargo, las clases abstractas pueden almacenar métodos abstractos pero no pueden crear objetos.

La aparición de métodos abstractos puede obligar a las subclases a hacer ciertas cosas.

Ejemplo: Ejemplo de clase de estudiante. El surgimiento de la clase estudiantil en realidad proviene del análisis de los estudiantes en la vida real. Zhang San: Acuéstese y duerma, estudie (tipo resumen) Li Si: Acuéstese y duerma, estudie (tipo mecánico)

estudiante de clase abstracta{

sueño vacío(){

Acuéstate y duerme;

}

estudio del vacío abstracto();

}

--- --- ------------------------------------- Interfaz: entendida simplemente como una expresión especial de un clase abstracta, cuando todos los métodos de una clase abstracta son abstractos, entonces se utilizan interfaces para representarlos.

Características: -- La interfaz es una regla expuesta al mundo exterior. --La ​​interfaz es una extensión de la funcionalidad. --La ​​aparición de interfaces reduce el acoplamiento. - En Java, el mecanismo de herencia múltiple se materializa de otra forma en Java, que son realidades múltiples.

- En Java, una clase puede heredar múltiples interfaces mientras hereda una clase. Ejemplo: interfaz PCI de la placa base. enchufe. Interfaz USB para ordenador portátil.

interfaz Fumar{

Método de fumar

}

clase Zhang San extiende El estudiante implementa Fumar{

void sleep(){

Acuéstate y duerme;

}

void Study(){}

Método de fumar{}

p>

}

El contenido generalmente definido en la interfaz: 1. Constantes globales. público estático final 2, método abstracto público. public abstract

Existe una relación de herencia entre clases.

La relación entre clases e interfaces es implementación.

Existe una relación de herencia entre interfaces y existe herencia múltiple entre interfaces