English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Java

Controle de fluxo do Java

Array do Java

Java Orientado a Objetos (I)

Java Orientado a Objetos (II)

Java Orientado a Objetos (III)

Tratamento de Exceções Java

Lista List do Java

Fila Queue do Java

Conjunto Map do Java

Conjunto Set do Java

Entrada e saída do Java (I/O)

Reader do Java/Writer

Outros tópicos do Java

Herança Java

Neste tutorial, vamos aprender sobre a herança em Java com exemplos.

A herança é uma das funcionalidades importantes do OOP (Programação Orientada a Objetos), que nos permite definir uma nova classe a partir de uma classe existente. Por exemplo,

classe Animal
{
    // método eat()
    // método sleep()
}
class Dog extends Animal
{
    // método bark()
}

No Java, usamos a palavra-chave extends para herdar de uma classe. Aqui, herdamos a classe Dog da classe Animal.

Animal é a superclasse (classe pai ou classe base), e Dog é a subclasse (classe subordinada ou derivada). A subclasse herda os campos e métodos da superclasse.

é-uma relação

Herança éé-arelação, apenas quando existem duas classes com-uma relação quando usamos herança.

Aqui estão alguns exemplos:

  • O carro é um veículo.

  • A laranja é uma fruta.

  • O cirurgião é um médico.

  • O cachorro é um animal.

Exemplo1:Herança Java

class Animal {
   public void comer() {
      System.out.println("Eu posso comer");
   }
   public void dormir() {
      System.out.println("Eu posso dormir");
   }
}
class Cão extends Animal {
   public void latir() {
      System.out.println("Eu posso latir");
   }
}
class Main {
   public static void main(String[] args) {
      Cão cão1 = new Cão();
      cão1.comer();
      cão1.dormir();
      cão1.latir();
   }
}

Saída de dados

Eu posso comer
Eu posso dormir
I can bark

Aqui, herdamos a subclasse Dog do pai Animal. A classe Dog herda os métodos eat() e sleep() da classe Animal.

Portanto, os objetos da classe Dog podem acessar os membros da classe Dog e da classe Animal.

Palavra-chave protegida

Nós aprendemos os modificadores de acesso private e public em aulas anteriores.

  • Os membros privados podem ser acessados apenas dentro da classe

  • Os membros publicos podem ser acessados de qualquer lugar

Você também pode definir métodos e campos como protegidos, os membros protegidos podem ser acessados

  • Dentro da classe

  • Nas subclasses

  • Dentro do mesmo pacote

Este é um resumo de acessibilidade dos modificadores de acesso.

modificadorclasse
pacote
subclasseglobal
publicSimSimSimSim
privadoSimNãoNãoNão
protegidoSimSimSimNão

Exemplo2:protegido

class Animal {
   protected String type;
   private String color;
   public void comer() {
      System.out.println("Eu posso comer");
   }
   public void dormir() {
      System.out.println("Eu posso dormir");
   }
   public String getColor(){
      return color;
   }
   public void setColor(String col){
      color = col;
   }
}
class Cão extends Animal {
   public void displayInfo(String c){
      System.out.println("Eu sou um ", + type);
      System.out.println("Minha cor é ", + c);
   }
   public void latir() {
      System.out.println("Eu posso latir");
   }
}
class Main {
   public static void main(String[] args) {
      Cão cão1 = new Cão();
      cão1.comer();
      cão1.dormir();
      cão1.latir();
 
      cão1.type = "mammal";
      cão1.setColor("preto");
      cão1.displayInfo(dog1).getColor()); 
   }
}

Saída de dados

Eu posso comer
Eu posso dormir
I can bark
Eu sou um mamífero
Minha cor é preta

Aqui, o campo de tipo da classe Animal é protegido. Já acessamos este campo a partir da classe Main

cão1.type = "mammal";

Isso é viável, porque as classes Animal e Main estão no mesmo pacote (no mesmo arquivo).

Sobrescrita de métodos Java

Do exemplo acima, sabemos que o objeto da subclasse também pode acessar os métodos da superclasse.

 O que acontece se definirmos o mesmo método tanto na superclasse quanto na subclasse?

Bem, neste caso, o método da subclasse substitui o método da superclasse. Por exemplo,

Exemplo3Sobrescrita de métodos/Exemplo de sobrescrita

class Animal {
   protected String tipo = "animal";
   public void comer() {
      System.out.println("Eu posso comer");
   }
   public void dormir() {
      System.out.println("Eu posso dormir");
   }
}
class Cão extends Animal {
  
   @Override
   public void comer() {
      System.out.println("Eu como comida para cão");
   }
   public void latir() {
      System.out.println("Eu posso latir");
   }
}
class Main {
   public static void main(String[] args) {
      Cão cão1 = new Cão();
      cão1.comer();
      cão1.dormir();
      cão1.latir();
   }
}

Saída de dados

Eu como comida para cão
Eu posso dormir
I can bark

Aqui, o método comer() aparece tanto na superclasse Animal quanto na subclasse Cão. Criamos o objeto da subclasse Cão chamado dog1Note: The difference in calling constructors and super methods. For more information, please visit

Quando usamos dog1Quando chamamos o método eat() do objeto, será chamado o método interno do Cão, não o método idêntico da superclasse. Isso é chamado de sobrescrita de métodos.

No programa acima, usamos o comentário @Override para informar ao compilador que estamos sobrescrevendo um método. No entanto, isso não é obrigatório. No próximo tutorial, vamos entender melhorSobrescrita de métodosNote: The difference in calling constructors and super methods. For more information, please visit

Se precisar chamar o método eat() da subclasse Animal, use a chave super.

Exemplo4super chave

class Animal {
   public Animal() {
     System.out.println("Eu sou um animal");
   }
   public void comer() {
     System.out.println("Eu posso comer");
   }
}
class Cão extends Animal {
   public Cão(){
      super();
      System.out.println("Eu sou um cão");
   }
  @Override
  public void comer() {
     super.comer();
     System.out.println("Eu como comida para cão");
  }
   public void latir() {
      System.out.println("Eu posso latir");
   }
}
class Main {
   public static void main(String[] args) {
      Cão cão1 = new Cão();
      cão1.comer();
      cão1.latir();
   }
}

Saída de dados

Eu sou um animal
Eu sou um cão
Eu posso comer
Eu como comida para cão
I can bark

在这里,我们使用了super关键字通过super()来调用构造函数。 另外,我们使用super.eat()调用Animal超类的eat()方法。

I can barkHere, we use the super keyword to call the constructor through super(). Additionally, we use super.eat() to call the eat() method of the Animal superclass.Note: The difference in calling constructors and super methods. For more information, please visit

Java super keyword

.

  • Inheritance types - There are five types of inheritance.

  • Single inheritance - Class B inherits only from class A.

  • Multi-level inheritance - Class B inherits from class A, and then class C inherits from class B.

  • Layered inheritance -Class A as parent class for B, C, and D.

  • Multiple inheritance -Class C extends interfaces A and B.Mixed inheritanceTwo or more

Inherited

Mixed.

  • Why use inheritance? Java does not support multiple inheritance and mixed inheritance through classes. However, we can implement multiple inheritance in Java through interfaces. We will learn about interfaces in the following chapters.

  • The most important use is the reusability of code. The code that exists in the superclass does not need to be written again in the subclass. In the following chapters, we will learn more about polymorphism.