Concepto: la herencia significa que la definición de una clase puede basarse en otra clase existente, es decir, la subclase hereda la clase principal, realizando así la reutilización del código de la clase principal. La relación entre dos clases: la clase principal generalmente tiene las características de común a cada subclase, mientras que la subclase puede agregar algunos métodos más personalizados. La herencia de clase es transitiva, es decir, las subclases pueden continuar derivando subclases, el concepto de clase ubicado en el nivel superior es más abstracto y el concepto de clases ubicadas en el nivel inferior es más concreto.
1. Defina subclases:
Formato de sintaxis
[Modificador] El nombre de la subclase de clase extiende el nombre de la clase principal {
Subclase
}
Modificador: predeterminado privado público privado privado
Un cuerpo de subclase es un nuevo contenido único agregado por una subclase basada en heredar el contenido de la clase principal. Puede incluir variables miembros, métodos de miembros, clases, interfaces, métodos de construcción, etc.
Por ejemplo, en una empresa, un empleado es un personal contratado por la empresa, y un gerente es un empleado especial en la empresa de gestión. Este tipo de empleado especial no solo tiene los atributos y métodos de los empleados comunes, sino también algunos atributos y métodos propios, como asignaciones especiales.
El código es el siguiente:
clase pública EmpleeEclass {Nombre de cadena privada; // nombre privado int id; // Número de empresa Salario doble privado; // Departamento de cadena privada de salario; // Departamento público PubliceEclass () {} public empleeEclass (name de cadena, int id, doble salario, departamento de cadena) {this.name = name; this.id = id; this.salary = salario; this.department = Departamento; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public int getId () {return id; } public void setid (int id) {this.id = id; } public Double GetSalary () {Salario de retorno; } public void setSalary (salario doble) {this.salary = salario; } public String getDepartment () {Departamento de retorno; } public void setDepartment (departamento de cadenas) {this.department = departamento; } @Override public String toString () {return "EmployeEclass [name =" + name + ", id =" + id + ", salario =" + salario + ", departamento =" + departamento + "]"; }}Este es el código para la clase de empleados, que tiene cuatro atributos, nombre, número, salario, departamento.
Public Class ManagerClass extiende EmployeClass {Private Double SpecialSalary; Public ManagerClass () {super ();} public ManagerClass (Nombre de cadena, IND int, salario doble, departamento de cadena, doble especialidad) {super (nombre, id, salario, departamento); this.specialSalary = especialSalary; } public Double GetSpecialSalary () {return specialSalary; } public void setSpecialSalary (doble especialSALARY) {this.specialsalary = especialSALARY; } @Override public string toString () {return super.ToString () + "/especialsal:" + especialSalary; }}Esta es una clase de subclase, gerente, con sus propios atributos, asignaciones especiales.
2. Accesibilidad de subclase a los miembros de la clase matriz
Una subclase puede heredar a los miembros de la clase principal, pero el acceso a los miembros de la clase principal está controlado por la función de acceso.
La clase principal y la clase infantil están en el mismo paquete: no se puede acceder directamente a los privados, pero podemos obtener el miembro privado de la clase principal a través de un método miembro con un atributo de acceso público.
La clase principal y la clase infantil no están en el mismo paquete: no se puede acceder directamente a los valores privados y predeterminados, pero podemos obtener el miembro privado de la clase principal a través del método miembro con propiedades de acceso público y protegido.
3. Sobrecarga y sobrescritura de los métodos de miembros de la clase
Cuando el nombre de la nueva variable miembro definida en la subclase es el mismo que una variable miembro en la clase principal, la subclase oculta la variable de miembro correspondiente en la clase principal.
Una sobrecarga o anulación de un método miembro es un método miembro definido en una subclase cuando el nombre de un método miembro definido en la clase principal es el mismo que el nombre de un método miembro en la clase principal.
(1) sobrecarga de métodos miembros
En el empleado y el gerente de Chestnut mencionado anteriormente, podemos definir un método miembro en la clase de empleados
public void setInfo (nombre de cadena, int id, salario doble, departamento de cadena) {this.name = new String (nombre); this.id = id; this.salary = salario; this.department = new String (Departamento); }En la clase del administrador, se puede definir como:
public void setInfo (nombre de cadena, int id, salario doble, departamento de cadenas, doble especialidad) {super (nombre, id, salario, departamento); this.specialSalary = especialSalary; }Esta es la sobrecarga de métodos de miembros
(2) anulación de métodos de miembros
Por lo general, hay dos formas:
① En el método miembro definido por la subclase, primero llame al método de miembro anulado en la clase principal y luego agregue algunas declaraciones de operación.
② En los métodos miembros definidos por la subclase, los métodos miembros anulados por la clase principal no se llaman, pero se reescribe un grupo de declaración. Esto permite una cobertura total de la clase principal. Este método debe implementarse cuando una operación de una subclase es completamente diferente de la operación del objeto de clase principal.
castaña:
En la clase de objeto, hay un método miembro igual () que determina si dos objetos son iguales y su código es:
public boolean euqals (object obj) {return (this == obj); }Se puede ver que este método de miembro es comparar si dos objetos se refieren a un objeto al mismo tiempo.
Pero ahora esperamos implementar una función que compara si el contenido de dos objetos del mismo tipo son iguales. Así que tenemos una clase plural a continuación, cada clase plural consiste en una parte real y una parte imaginaria. La función de diseño puede comparar si dos números complejos son iguales. El código es el siguiente:
clase pública ComplexNumber {Private Double Re; Private Doble IM; public COMPLEXNumber () {re = 0.0; im = 0.0;} public COMPLEXNumber (double re, double im) {this.re = re; this.im = im; } public doble getre () {return re; } public void setre (doble re) {this.re = re; } public doble getim () {return im; } public void setim (doble im) {this.im = im; } public boolean iguales (objeto OtroBject) {if (this == OtherObject) return true; if (otherObject == null) return false; if (getClass ()! = OtherObject.getClass ()) return false; ComplexNumber Otro = (ComplexNumber) OtroBject; if ((re == OTRO.RE) && (im == Other.im)) return true; else devuelve falso; } public String toString () {String str = ""; if (re! = 0) str += re; if (im == 0) return str; if (im <0) str += im +"i"; else str + = " +" + im + "i"; regresar str; } public static void main (string [] args) {complejnumber c1, c2; C1 = nuevo ComplexNumber (2,3); C2 = nuevo ComplexNumber (2, -3.4); if (c1.equals (c2)) {system.out.println ("(" +c1 +") == (" +c2 +")"); } else {system.out.println ("(" +c1 +") <> (" +c2 +")"); }}}El resultado es (2.0 + 3.0i) <> (2.0-3.4i)
Lo anterior es la breve discusión de la comprensión principal de Java de la herencia que el editor le brinda. Espero que todos apoyen a Wulin.com más ~