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

Tutorial Básico de Java

Controle de fluxo Java

Java Array

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceção Java

Java Lista (List)

Java Queue (Fila)

Conjuntos Java Map

Conjuntos Java

E/S de Java (I/O)/O)

Java Reader/Writer

Outros tópicos do Java

Sobrescrita de Método Java

Neste tutorial, vamos aprender sobre a sobrescrita de métodos no Java através de exemplos.

No tutorial anterior, aprendemos sobre herança. Herança é uma propriedade da POO que nos permite derivar uma nova classe (subclasse) a partir de uma classe existente (superclasse), onde a subclasse herda os atributos e métodos da superclasse.

Agora, se o mesmo método for definido tanto na superclasse quanto na subclasse, o método da subclasse substituirá o método da superclasse. Isso é chamado de sobrescrita de método (ou sobrescrita de método).

示例1: Sobrescrita de método

class Animal {
   public void displayInfo() {
      System.out.println("Eu sou um animal.");
   }
}
class Dog extends Animal {
   @Override
   public void displayInfo() {
      System.out.println("Eu sou um cão.");
   }
}
class Main {}}
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.displayInfo();
   }
}

Saída:

Eu sou um cachorro.

No programa acima, o método displayInfo() existe tanto na classe pai Animal quanto na subclasse Dog.

Quando usamos d1Quando um objeto (objeto da subclasse) chama displayInfo(), é chamado o método da subclasse Dog. O método displayInfo() da subclasse sobrescreve o método da superclasse.

Atenção, no nosso exemplo, usamos a anotação @Override. Em Java, os comentários são metadados que usamos para fornecer informações ao compilador. Aqui, a anotação @Override informa ao compilador que o método após a anotação substituirá o método da superclasse.

O uso de @Override não é obrigatório. No entanto, quando usamos esse método, ele deve seguir todas as regras de sobrescrita. Caso contrário, o compilador gerará um erro.

Regras de sobrescrita do Java

  • A classe pai e a subclasse devem ter o mesmo nome de método, o mesmo tipo de retorno e a mesma lista de argumentos.

  • Não podemos sobrescrever métodos declarados como final e static.

  • Devemos sempre sobrescrever métodos abstratos da superclasse (será discutido em futuros tutoriais).

Palavra-chave super no Java

Um problema comum ao executar a sobrescrita no Java é:

 Podemos acessar métodos da superclasse após a sobrescrita?

A resposta éPositivo。Para acessar métodos da superclasse a partir da subclasse, usamos a palavra-chave super.

示例2:Uso da palavra-chave super

class Animal {
   public void displayInfo() {
      System.out.println("Eu sou um animal.");
   }
}
class Dog extends Animal {
   public void displayInfo() {
      super.displayInfo();
      System.out.println("Eu sou um cão.");
   }
}
class Main {}}
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.displayInfo();
   }
}

Saída:

Eu sou um animal.
Eu sou um cachorro.

No exemplo acima, a subclasse Dog sobrescreveu o método displayInfo() da superclasse Animal.

Quando usamos o d da subclasse Dog1Quando um objeto chama o método displayInfo(), será chamado o método interno da subclasse Dog. Não será chamado o método interno da classe pai.

Dentro do método displayInfo() da subclasse Dog, usamos super.displayInfo() para chamar o método displayInfo() da classe pai.

É importante notar que os construtores não são herdados no Java. Portanto, não existem problemas de sobrescrita de construtores no Java.

Mas, podemos chamar o construtor da superclasse a partir de sua subclasse. Para isso, usamos super(). Para mais informações, acessePalavra-chave super do Java

Métodos de sobrescrita dos modificadores de acesso

Métodos declarados nos mesmos métodos da classe pai e subclasses podem ter diferentes modificadores de acesso. No entanto, há uma restrição.

Somente podemos usar os modificadores de acesso que fornecem uma maior permissão de acesso do que os modificadores de acesso da classe pai. Por exemplo,

Supondo que o método myClass() da classe pai seja declarado como protected. Então, o método myClass() na classe filha pode ser public ou protected, mas não pode ser private.

示例3:在重写中使用的访问修饰符

class Animal {
   protected void displayInfo() {
      System.out.println("Eu sou um animal.");
   }
}
class Dog extends Animal {
   public void displayInfo() {
      System.out.println("Eu sou um cão.");
   }
}
class Main {}}
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.displayInfo();
   }
}

Saída:

Eu sou um cachorro.

No exemplo acima, a subclasse Dog sobrescreveu o método displayInfo() da classe pai Animal.

Cada vez que usamos d1Quando chamamos displayInfo() a partir do objeto da subclasse, é chamado o método interno da subclasse.

Atenção, displayInfo() é declarado como protegido (protected) na classe pai Animal. Este método na classe filha Dog tem o especificador de acesso público (public). Isso é permitido porque o público oferece maior permissão de acesso do que o protegido.

Sobrescrever método abstrato

Em Java, a classe abstrata é criada como a classe mãe (classe base) de outras classes. E, se a classe contiver métodos abstratos, deve ser sobrescrita.

Nos próximos tutoriais, vamos aprender mais sobre a sobrescrita de classes abstratas e métodos abstratos.