Aprendizagem Java 3: herança orientada a objetos (explique a palavra-chave super)

Herança orientada a objetos Java

1. Fale sobre a teoria básica

O que é herança?

Herança é permitir que um tipo de objeto tenha todas as propriedades e métodos não privados de outro tipo de objeto !

Na herança, existem dois conceitos: classe pai e classe filha!

A subclasse herda a classe pai, que é um relacionamento universal no mundo natural! Pais e filhos podem ser diferentes, mas devem ter muitas semelhanças, como carnívoros e herbívoros no mundo animal, eles são todos animais; para pais e filhos, os filhos devem ser mais parecidos com seus pais e relacionados por sangue Também seguirá as leis pertinentes, essa é a conexão! De um modo geral, os atributos e métodos da classe pai são mais gerais e costumam ser usados ​​nas subclasses ; os métodos das subclasses são frequentemente mais específicos, o que é mutação e evolução da perspectiva do mundo natural; e expansão e aprimoramento da perspectiva do desenvolvimento de software!

Modelos de sintaxe relacionados herdados:

Insira a descrição da imagem aqui
Esta regra gramatical é muito mais simples do que C ++! ! ! Do ponto de vista deste módulo de gramática, ele não possui herança pública, privada ou protegida, apenas uma herança simples ... É muito fácil!

Alguns recursos herdados:
o primeiro:

A classe filha tem todas as propriedades e métodos não privados da classe pai

segundo:

Java não permite herança múltipla , ou seja, se A herda B, A não pode mais herdar C

terceiro:

Java permite a herança de vários níveis. Este é um recurso, ou seja, A herda B, B herda C e A herda indiretamente C.
Isso não é bom, porque melhora o acoplamento do código, está sujeito a erros e não é fácil de expandir.

quarto:

As subclasses podem ter seus próprios atributos e métodos, ou seja, expandir com base na classe pai

Em segundo lugar, a instanciação de objetos de subclasse

Exibição do programa:
import java.util.Scanner;

public class Main6 {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		
		String name = sc.next();
		int age = sc.nextInt();
		String school = sc.next();
		
		Student st = new Student(name, age, school);
		st.Show();
		
		sc.close();
	}
}

class Person {
    
    
	protected String name;
	protected int age;
	protected Person(String name, int age) {
    
    
		this.name = name;
		this.age = age;
		System.out.println("Person is constructed!");
	}
}

class Student extends Person {
    
    
	private String school;
	public Student(String name, int age, String school) {
    
    
		super(name, age);
		this.school = school;
		System.out.println("Student is constructed!");
	}
	public void Show() {
    
    
		System.out.println("The student's information is:");
		System.out.println("Name is:" + this.name + "  Age is:" + this.age + "  School is:" + this.school);
	}
}
Mostrar resultados:

Insira a descrição da imagem aqui

O que aprendemos?

Primeiro: a ordem de construção das classes pai e filho

De acordo com as leis do mundo natural, existem galinhas antes dos ovos! Apenas o pai existente (ancestral) tem filhos!
Portanto, quando instanciamos um objeto de uma subclasse, devemos primeiro instanciar o ancestral, e o sistema deve conhecer a classe pai antes de instanciar a subclasse. Portanto, pode-se ver no caso do programa acima que a classe pai é construída primeiro e a subclasse é construída posteriormente.

Segundo: A estrutura sem parâmetros e a estrutura parametrizada da subclasse

Na verdade, seja uma estrutura parametrizada ou uma estrutura sem parâmetros, você precisa chamar super (); mas esta palavra-chave é usada principalmente no caso de construção parametrizada, semelhante a este (); para esse uso, você pode chamar a estrutura da classe pai Método, passe os parâmetros reais da subclasse para a classe pai e instancie a subclasse após completar a instanciação da classe pai! Então, o mais importante é esse super ();

Terceiro, aprender super palavras-chave

Qual é a super palavra-chave?

No programa acima, vimos a palavra-chave super, sabendo que deve ser a primeira frase do método de construção da subclasse , e então usar essa palavra-chave super para fazer referência ao método de construção da classe pai!
Em detalhes: quando
criamos um objeto de subclasse, vamos primeiro criar o objeto da classe pai no método de construção da subclasse. Você deve esperar até que a classe pai seja instanciada antes de poder instanciar a subclasse. É por isso que A palavra-chave super deve ser usada na primeira frase do método de construção da subclasse!
Conclui-se que a função principal do super é completar a subclasse chamando o conteúdo da classe pai, ou seja, chamar as propriedades ou métodos da classe pai.
Na verdade : mesmo no construtor sem parâmetros, mesmo que nossos programadores não tenham escrito a palavra-chave super, na verdade esta super (); ainda existe !

Uso da palavra-chave super: preste atenção na palavra "direto"!

Insira a descrição da imagem aqui

Experimente os três usos acima:

public class Main6 {
    
    
	public static void main(String[] args) {
    
    
		Cat c = new Cat("小花猫", 18, "大草鱼");
		c.Work();
		c.Show();
	}
}

class Animal {
    
    
	protected String name;
	protected int age;
	
	protected Animal(String name, int age) {
    
    
		this.name = name;
		this.age = age;
	}
	
	public void Work() {
    
    
		System.out.println("他们会为了生存去吃东西、交配……");
	}
	
	public void Show() {
    
    
		System.out.println(this.name + "今年已经:" + this.age + "岁了!");
	}
}

class Cat extends Animal {
    
    
	private String Food;
	public Cat(String name, int age, String Food) {
    
    
		super(name, age);
		this.Food = Food;
	}
	
	public void Work() {
    
    
		super.Work();
		System.out.println(this.name + "比较喜欢吃的东西是" + this.Food);
	}
	
	public void Show() {
    
    
		super.Show();
	}
}

Exibição do resultado:

Insira a descrição da imagem aqui

O que aprendemos?

Sem os parênteses, a palavra-chave super pode ser usada como uma referência ao objeto da classe pai.Este objeto é um objeto virtual anônimo, no nível do objeto, não no nível da classe. Podemos usar esse objeto de superreferência para acessar algumas das propriedades ou métodos mais comuns da classe pai! Pode reduzir muito a quantidade de código e alcançar a reutilização de código!

Qual é a principal diferença entre a palavra-chave super e esta?

A palavra-chave super é muito semelhante a esta palavra-chave! Qual a diferença entre eles?

A primeira diferença:

A palavra-chave super é na verdade a referência do objeto da subclasse para a classe pai, e a palavra-chave this é a referência do objeto no qual o método atual atua!

A segunda diferença:

A palavra-chave super é para acessar as propriedades e métodos da classe pai do objeto da subclasse atual,
enquanto a palavra-chave this é para acessar as propriedades e métodos do objeto atual

O terceiro não é uma diferença, mas uma semelhança:

Tanto a palavra-chave this quanto a palavra-chave super devem ser colocadas na primeira linha do método!

Acho que você gosta

Origin blog.csdn.net/qq_44274276/article/details/104876869
Recomendado
Clasificación