JAVA ----- Explicación detallada de herencia y super palabra clave

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 :

  1. Las subclases no pueden heredar las variables privadas de la clase principal
  2. 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
  3. 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.

Supongo que te gusta

Origin blog.csdn.net/weixin_45102820/article/details/113085718
Recomendado
Clasificación