Este artigo descreve a herança da programação orientada a objetos Java. Compartilhe -o para sua referência, como segue:
Herança: Uma aula especial tem todas as propriedades e comportamentos de uma classe geral.
Benefícios de herança:
1. Reutilibilidade de código aprimorada
2. Deixe a classe ter um relacionamento com a classe antes, e somente com esse relacionamento pode haver características polimórficas. A herança é a relação entre uma classe e uma classe antes dela.
Notas:
1.Java suporta apenas a herança única, não a herança múltipla. Como a herança múltipla tem riscos de segurança: quando várias classes pais definem a mesma função, mas as funções são diferentes, a subclasse não sabe qual é executada.
2. Quando uma classe infantil herda a classe pai, herda todos os métodos e propriedades da classe pai e pode ser usada diretamente.
3. Java suporta herança de várias camadas, ou seja, o relacionamento entre neto-filho-pai
gramática:
[Classe modifier] Classe Nome da subclasse estende o nome da classe pai {declaração;}Por exemplo:
classe PSERSON {INT AGE; Nome da string; public void Speak () {System.out.println ("Hello World!"); }} // herdar a classe Pessoa, herde todos os métodos e atributos do aluno da classe pai estende PSERSON {public void Study () {System.out.println ("bom estudo!"); }} // herdar a classe Pessoa, herde todos os métodos e atributos do trabalhador da classe pai estende PSERSON {public void work () {System.out.println ("Bom trabalho!"); }}Como usar funções em um sistema de herança (consulte a documentação da API):
Verifique as funções da classe pai e crie objetos de subclasse para usar funções
Esses três cenários são frequentemente encontrados durante o processo de herança:
1) variável com o mesmo nome
1. Se uma subclasse possui uma variável de membro não privada de mesmo nome, a subclasse acessa a variável dessa classe e usa isso; A subclasse acessa a variável de mesmo nome na classe pai e usa super.
2. Isso representa uma referência ao objeto desta classe
3.Super representa uma referência ao objeto de classe pai (o uso é o mesmo que este)
2) funções com o mesmo nome
1. Se uma subclasse aparecer uma função exatamente a mesma da classe pai (o nome da função e os parâmetros são os mesmos), quando o objeto da subclasse chamar a função, o conteúdo da função da subclasse será executado. , as funções da classe pai serão substituídas (também chamadas de reescrita).
2. Reescreva a definição: quando a subclasse herda a classe pai, segue as funções da classe pai e entra na subclasse. No entanto, embora a subclasse tenha essa função, o conteúdo da função é inconsistente com a classe pai. No momento, não há necessidade de definir uma nova função, mas use o recurso de substituição, retenha a definição da função da classe pai e reescreva o conteúdo da função.
3. Notas sobre reescrita (substituição):
<1> Subclasses substituem a classe pai. Você deve garantir que as permissões da classe infantil sejam maiores ou iguais às permissões da classe pai antes da herança, caso contrário, a compilação falhará. (público> Não escreva palavras -chave retóricas> privado)
<2> estático só pode cobrir estático
<3> Sobrecarga: Olhe apenas a lista de parâmetros da função com o mesmo nome e reescrita: o método da classe dos pais da criança deve ser exatamente o mesmo (nome da função e lista de parâmetros)
classe fu {// public void show () Quando a classe pai for exibida (), será exatamente a mesma da função da subclasse. A função de show da classe pai será reescrita public void show (nome da string) // A função de show da classe pai é diferente da subclasse (a lista de parâmetros é diferente); portanto, a função show da classe pai não será reescrita {System.out.println (nome); }} classe zi estende fu {public void show () {System.out.println ("zi"); }} classe jicheng {public static void main (string [] args) {zi z1 = new zi (); z1.show ("nihao"); // A função do show da classe pai será chamada}}3) Construtor
1. Ao inicializar o objeto Subclasse, o construtor da classe pai também será executado, porque a primeira linha do construtor da subclasse possui uma instrução implícita super () por padrão.
2. Super () acessará o construtor dos parâmetros ocos na classe pai, e a primeira linha de todos os construtores na subclasse é super () por padrão
3. A razão pela qual as subclasses devem acessar o construtor da classe pai
<1> Como a subclasse de dados na classe pai pode ser obtida diretamente, a subclasse é primeiro ver como a classe pai inicializa os dados. Portanto, quando a subclasse é inicializada, primeiro acessa o construtor da classe pai por padrão.
<2> Se você deseja acessar o construtor formulado pela classe pai ou pelo construtor cuja classe pai não possui parâmetros vazios, você pode formulá -lo definindo manualmente a declaração super.
<3> É claro que a primeira linha do construtor da subclasse também pode ser especificada manualmente para acessar o construtor dessa classe, mas pelo menos um dos construtores da subclasse acessará o construtor da classe pai.
classe fu {nome da string; Int Age; Fu () {System.out.println ("hello fu");} fu (nome da string) {System.out.println (nome); } Fu (nome da string, int age) {this.name = name; this.age = idade; System.out.println ("nome:"+nome+", idade:"+idade); }} classe zi estende Fu {//zi() {system.out.println("hello zi ");} Por padrão, o construtor zi () da classe pai será chamado primeiro. Super ("Zhangsan", 20); // Use manualmente a instrução super para especificar o construtor da classe pai para obter informações não privadas do sistema de classe pai.out.println (nome+"::"+idade); }} classe teste {public static void main (string [] args) {zi z1 = new zi (); }}Exemplo de exceção do construtor:
Escreva os resultados do programa
classe super {int i = 0; public super (strings) {i = 1; }} classe Demo estende Super {public Demo (Strings) {i = 2; } public static void main (string [] args) {Demo d = new Demo ("Sim"); System.out.println (DI); }} // A compilação falhou porque o construtor com parâmetros vazios estava ausente na classe pai. // ou a subclasse deve especificar o construtor na classe pai a ser chamado por meio da instrução super.Reescrever e sobrecarregar exemplos:
classe Demo {int show (int a, int b) {return 0;}}As seguintes funções podem existir em uma subclasse de demonstração.
A.Public Int Show (int a, int b) {return 0;} // sim, substitua.
B.Private int Show (int a, int b) {return 0;} // Não, as permissões não são suficientes.
C.Private Int Show (int a, longo b) {return 0;} // Sim, não é a mesma função que a classe pai. Nenhuma cobertura é equivalente à sobrecarga.
D.Public Short Show (int a, int b) {return 0;} // Não, porque essa função não pode aparecer na mesma classe que a função especificada ou na classe dos pais infantil.
E.static int show (int a, int b) {return 0;} // não, estático só pode substituir a estática. <br> <br> Portanto, a subclasse permite reescrever e sobrecarregar.
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Espero que este artigo seja útil para a programação Java de todos.