Sobreposição do método Java
Substituição do método Java
Neste tutorial, aprenderemos sobre substituição de métodos em Java com a ajuda de exemplos.
No último tutorial, aprendemos sobre herança. A herança é uma propriedade OOP que nos permite derivar uma nova classe (subclasse) de uma classe existente (superclasse). A subclasse herda os atributos e métodos da superclasse.
Agora, se o mesmo método for definido na superclasse e na subclasse, o método da classe da subclasse substituirá o método da superclasse. Isso é conhecido como substituição de método.
Exemplo 1:substituição de método
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
@Override
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
Saída :
I am a dog.
No programa acima, o
displayInfo()
está presente tanto no método Animal superclasse e o Cão subclasse. Quando chamamos
displayInfo()
usando o d1 object (objeto da subclasse), o método dentro da subclasse Dog é chamado. O displayInfo()
O método da subclasse substitui o mesmo método da superclasse. 
Observe o uso do
@Override
anotação em nosso exemplo. Em Java, as anotações são os metadados que usamos para fornecer informações ao compilador. Aqui, o @Override
annotation especifica ao compilador que o método após esta anotação substitui o método da superclasse. Não é obrigatório usar
@Override
. No entanto, quando usamos isso, o método deve seguir todas as regras de sobreposição. Caso contrário, o compilador gerará um erro. Regras de substituição Java
- Tanto a superclasse quanto a subclasse devem ter o mesmo nome de método, o mesmo tipo de retorno e a mesma lista de parâmetros.
- Não podemos substituir o método declarado como
final
estatic
. - Devemos sempre substituir métodos abstratos da superclasse (será discutido em tutoriais posteriores).
super palavra-chave na substituição de Java
Uma pergunta comum que surge ao executar a substituição em Java é:
Podemos acessar o método da superclasse após a substituição?
Bem, a resposta é Sim . Para acessar o método da superclasse da subclasse, usamos o
super
palavra-chave. Exemplo 2:uso de superpalavra-chave
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
super.displayInfo();
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
Saída :
I am an animal. I am a dog.
No exemplo acima, a subclasse Cão substitui o método
displayInfo()
da superclasse Animal . Quando chamamos o método
displayInfo()
usando o d1 objeto do Cão subclasse, o método dentro do Dog subclasse é chamada; o método dentro da superclasse não é chamado. Dentro de
displayInfo()
do Cão subclasse, usamos super.displayInfo()
para chamar displayInfo()
da superclasse. É importante notar que os construtores em Java não são herdados. Portanto, não existe substituição de construtor em Java.
No entanto, podemos chamar o construtor da superclasse de suas subclasses. Para isso, usamos
super()
. Para saber mais, visite a super palavra-chave Java. Especificadores de acesso na substituição de método
O mesmo método declarado na superclasse e suas subclasses podem ter diferentes especificadores de acesso. No entanto, há uma restrição.
Só podemos usar esses especificadores de acesso em subclasses que fornecem acesso maior do que o especificador de acesso da superclasse. Por exemplo,
Suponha que um método
myClass()
na superclasse é declarado protected
. Em seguida, o mesmo método myClass()
na subclasse pode ser public
ou protected
, mas não private
. Exemplo 3:especificador de acesso na substituição
class Animal {
protected void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
Saída :
I am a dog.
No exemplo acima, a subclasse Cão substitui o método
displayInfo()
da superclasse Animal . Sempre que chamamos
displayInfo()
usando o d1 (objeto da subclasse), o método dentro da subclasse é chamado. Observe que, o
displayInfo()
é declarado protected
no Animais superclasse. O mesmo método tem o public
especificador de acesso no Cão subclasse. Isso é possível porque o public
fornece acesso maior que o protected
. Substituindo métodos abstratos
Em Java, classes abstratas são criadas para serem a superclasse de outras classes. E, se uma classe contém um método abstrato, é obrigatório substituí-lo.
Aprenderemos mais sobre classes abstratas e sobrescrevendo métodos abstratos em tutoriais posteriores.
Java
- Operadores Java
- Java try-with-resources
- Anotações Java
- Tipos de anotação Java
- Método String Length () em Java:como encontrar com exemplo
- Método Java String indexOf() com substring e exemplos
- Método Java String charAt() com exemplo
- Método Java String compareTo():como usar com exemplos
- String Java contém() Método | Verificar substring com exemplo
- Java String EndsWith() Método com Exemplo