Seguimiento de la herencia

Reescritura de métodos (anular / sobrescribir)

Definición: En la subclase, los métodos heredados de la clase principal se pueden modificar según sea necesario, lo que también se denomina restablecimiento y cobertura de métodos. Cuando se ejecuta el programa, el método de la subclase anulará el método de la clase principal.

Afirmar:

  1. El método reemplazado de la subclase debe tener el mismo nombre de método y la misma lista de parámetros que el método reemplazado de la clase principal
  2. El tipo de valor de retorno del método anulado por la subclase no puede ser mayor que el tipo de valor de retorno del método anulado por la clase principal
  3. Los derechos de acceso utilizados por el método anulado de la subclase no pueden ser menores que los derechos de acceso del método anulado de la
    clase principal. La subclase no puede anular el método declarado como privado en la clase principal.
  4. La excepción lanzada por el método de subclase no puede ser mayor que la excepción del método anulado de la clase principal

Nota:

  • Los métodos con el mismo nombre y los mismos parámetros en la subclase y la clase principal deben declararse como no estáticos (es decir, anulados) al mismo tiempo, o declarados como estáticos (no anulados) al mismo tiempo. Debido a que el método estático pertenece a la clase, la subclase no puede anular el método de la clase principal.
class Person{
    
    
	String name;
	int age;
	
	public void walk(){
    
    
		System.out.println("Person类的walk方法");
	}
	public void eat(){
    
    
		System.out.println("Person类的eat方法");
	}
}
public class Student extends Person{
    
    
	public void walk(){
    
    
		System.out.println("Student类的walk方法");
	}
	public void eat(){
    
    
		System.out.println("Student类的eat方法");
	}
}

super palabra clave

Utilice super en la clase Java para llamar a la operación especificada en la clase principal:

  • super se puede utilizar para acceder a las propiedades definidas en la clase principal
  • super se puede usar para llamar a métodos miembros definidos en la clase principal
  • super se puede usar para llamar al constructor de la clase padre en el constructor de la subclase

Nota:

  • Especialmente cuando hay miembros con el mismo nombre en la clase principal secundaria, puede usar super para indicar que se llama al miembro de la clase principal
  • La trazabilidad de super no se limita al padre directo
  • El uso de super y esto es similar, esto representa la referencia del objeto de esta clase y super representa la identificación del espacio de memoria de la clase padre
class Person{
    
    
	protected String name = "张三";
	protected int age;
	public String getInfo(){
    
    
		return "Name:" + name + "\nage:" + age;
	}
class Student extends Person {
    
    
	protected String name = "李四";
	private String school = "New Oriental";
	public String getSchool() {
    
    
		return school; 
	}
	public String getInfo() {
    
    
		return super.getInfo() + "\nschool: " + school;
	}
}
public class Test {
    
    
	public static void main(String[] args) {
    
    
		Student st = new Student();
		System.out.println(st.getInfo());
	}
}

La subclase llama al método de construcción de la clase principal.

  • Todos los constructores de la subclase accederán al constructor con parámetros vacíos en la clase principal de forma predeterminada
  • Cuando no hay un constructor con parámetros vacíos en la clase principal, el constructor de la subclase debe usar la declaración ** this (lista de parámetros) o super (lista de parámetros) para especificar la llamada al constructor correspondiente en esta clase o la clase principal. Al mismo tiempo, solo puede "elegir uno" y debe colocarse en la primera línea del constructor
  • Si el constructor de la subclase no llama explícitamente a la clase principal ni al constructor de esta clase, y no hay un constructor sin parámetros en la clase principal, se produce un error de compilación.
class Person {
    
    
	private String name;
	private int age;
	private Date birthDate;
	public Person(String name, int age, Date d) {
    
    
		this.name = name;
		this.age = age;
		this.birthDate = d; 
	}
	public Person(String name, int age) {
    
    
		this(name, age, null);
	}
	public Person(String name, Date d) {
    
    
		this(name, 30, d);
	}
	public Person(String name) {
    
    
		this(name, 30);
	}
}
public class Student extends Person {
    
    
	private String school;
	public Student(String name, int age, String s) {
    
    
		super(name, age);
		school = s; 
	}
	public Student(String name, String s) {
    
    
		super(name);
		school = s; 
	}
	// 编译出错: no super(),系统将调用父类无参数的构造器。
	public Student(String s) {
    
     
		school = s; 
	}
}
Diferencia esta súper
Atributos de acceso El atributo en la clase de texto, si esta clase no tiene este atributo, continúe buscando desde la clase principal Accede directamente a los atributos de la clase principal.
Método de llamada Métodos de acceso en esta clase, si esta clase no tiene este método, continúe buscando desde la clase principal Acceso directo a métodos en la clase padre
Constructor de llamadas Para llamar al constructor de esta clase, debe colocarse en la primera línea del constructor Llame al constructor de la clase principal, debe colocarse en la primera línea del constructor de la subclase

Supongo que te gusta

Origin blog.csdn.net/qq_44346427/article/details/109002714
Recomendado
Clasificación