À medida que o ouvido atinge os tímpanos, rapidamente ficamos sabendo que isso pode ser feito em virtude de diferentes tipos de dados ou de argumentos passados para uma função, o que um programador aprendeu inicialmente enquanto aprendia polimorfismo em java. Antes do JDK 5.0 não era possível substituir um método alterando o tipo de retorno. Quando substituímos um método da classe pai, o nome dos tipos de argumento e o tipo de retorno do método substituído na classe filha devem ser exatamente iguais aos do método da classe pai. Dizia-se que o método predominante era invariante em relação ao tipo de retorno.
Java versão 5.0 em diante é possível ter diferentes tipos de retorno para um método de substituição na classe filho, mas o tipo de retorno do filho deve ser um subtipo do tipo de retorno do pai. O método de substituição torna-se variante em relação ao tipo de retorno.
O tipo de retorno covariante é baseado no Princípio de substituição de Liskov .
Agora, geeks, vocês devem estar se perguntando por que usar, para o qual listaremos as vantagens a seguir:
- Isso ajuda a evitar conversões confusas de tipos presentes na hierarquia de classes e, assim, tornar o código legível, utilizável e sustentável.
- Temos a liberdade de ter tipos de retorno mais específicos ao substituir métodos.
- Ajuda na prevenção de ClassCastExceptions em tempo de execução em devoluções
Observação: Se trocarmos os tipos de retorno Base e Derivado, o programa acima não funcionaria. Por favor veja esse programa por exemplo.
Exemplo Duas classes usadas para tipos de retorno
Java// Java Program to Demonstrate Different Return Types // if Return Type in Overridden method is Sub-type // Class 1 class A { } // Class 2 class B extends A { } // Class 3 // Helper class (Base class) class Base { // Method of this class of class1 return type A fun() { // Display message only System.out.println('Base fun()'); return new A(); } } // Class 4 // Helper class extending above class class Derived extends Base { // Method of this class of class1 return type B fun() { // Display message only System.out.println('Derived fun()'); return new B(); } } // Class 5 // Main class public class GFG { // Main driver method public static void main(String args[]) { // Creating object of class3 type Base base = new Base(); // Calling method fun() over this object // inside main() method base.fun(); // Creating object of class4 type Derived derived = new Derived(); // Again calling method fun() over this object // inside main() method derived.fun(); } }
Saída:
Base fun() Derived fun()
Criar questionário