La herencia puede hacer que las subclases tengan las propiedades y métodos de la clase padre o redefinir o agregar propiedades y métodos, etc.
Notas sobre la herencia :
- Las subclases no pueden heredar las variables privadas de la clase principal
- La subclase anula el método de la clase principal y la autoridad de acceso no puede ser menor que la de la clase principal, público> predeterminado> privado
- Las subclases solo pueden heredar de una clase principal, pero puede haber herencia múltiple
Permítanme primero hablar sobre la diferencia entre super y estas palabras clave en Java:
Palabra clave | Acceso a variables de miembros | Constructor de acceso | Método de miembro de acceso |
---|---|---|---|
esta | this. miembro variable-acceso a esta variable miembro de clase | this (...) - acceso al método de construcción de esta clase | this. member método-acceso al método miembro de esta clase |
súper | super. miembro variable-acceso a la variable miembro de la clase padre | super (…): acceso al método de construcción de la clase principal | super. método de miembro-acceso al método de miembro de clase padre |
La sintaxis de la herencia en Java es:
subclase de clase pública extiende la clase principal {}
- Primero mira un fragmento de código:
public class father {
public int age=40;//年龄
public father() {
System.out.println("father中无参构造方法被调用");
}
public father(int age) {
System.out.println("father中带参构造方法被调用");
}
}
public class son extends father{
public int age=20;
public son() {
System.out.println("son中无参构造方法被调用");
}
public son(int age) {
System.out.println("son中带参构造方法被调用");
}
public void show() {
int age=30;
System.out.println(age);//30
System.out.println(this.age);//20
System.out.println(super.age);//40
}
}
public class Demo {
public static void main(String[] args) {
son s=new son();
s.show();
son s1=new son(32);
s1.show();
}
}
El objeto hijo se crea en la función principal y el resultado final es:
father中无参构造方法被调用
son中无参构造方法被调用
30
20
40
father中无参构造方法被调用
son中带参构造方法被调用
30
20
40
Independientemente de si se llama a la construcción parametrizada de la subclase o la construcción sin parámetros, se llamará a la construcción sin parámetros de la clase padre.
Esto se debe a que :
- Todos los constructores de la subclase accederán a los constructores sin argumentos de la clase principal de forma predeterminada.
- Debido a que la subclase heredará los datos de la clase principal y también puede usar los datos de la clase principal, antes de que se inicialice la subclase, se debe completar la inicialización de datos de la clase principal.
- La primera declaración de cada método de construcción de subclase es por defecto: super ()
Por lo tanto, cada vez que se llama a una subclase, el sistema ejecuta primero la instrucción super () de forma predeterminada, y primero llama al método de construcción sin parámetros de la clase principal.
Entonces, ¿cómo podemos llamar al constructor de la clase padre con parámetros?
public class son extends father{
public int age=20;
public son() {
super(20);
System.out.println("son中无参构造方法被调用");
}
public son(int age) {
super(20);
System.out.println("son中带参构造方法被调用");
}
public void show() {
int age=30;
System.out.println(age);//30
System.out.println(this.age);//20
System.out.println(super.age);//40
}
}
Simplemente agregue super (x) al constructor de subclase (x es un parámetro)
- Use super para implementar la reescritura del método de subclase
Mira el código directamente
padre:
public class Phone {
public void call(String name) {
System.out.println("给"+name+"打电话");
}
}
Subclase:
public class newPhone extends Phone {
@Override
public void call(String name) {
System.out.println("开启视频");
super.call(name);
}
}
Función principal:
public class test {
public static void main(String[] args) {
newPhone p=new newPhone();
p.call("小李");
}
}
La palabra clave super se puede usar para llamar directamente al método de la clase principal y luego escribir las propiedades específicas de esta clase en la subclase.
@Override es una anotación que se puede usar para verificar la exactitud de la declaración del método de reemplazo.