Advertisement
airton-junior

HERANÇA, POLIMORFISMO, CLASSES E MÉTODOS ABSTRATOS, INTERFACES

Mar 17th, 2023
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.87 KB | None | 0 0
  1. public with sharing abstract class Animal {
  2.     protected String ambiente;
  3.     protected String gestacao;
  4.     protected Integer idade;
  5.     protected abstract void locomover();
  6. }
  7.  
  8. /*Classe abstrata mais genérica de todas,
  9. mãe da classe abstrata Mamífero, filha de
  10. Animal e Avó da classe Gato e da classe Ornitorrinco*/
  11.  
  12. public with sharing abstract class Mamifero extends Animal{
  13.     public Mamifero(){
  14.         super.gestacao = 'gera dentro da barriga da mãe';
  15.     }
  16.     public abstract Boolean mamar();
  17.  
  18.     public virtual void seAlimentar(String acao){
  19.         System.debug(acao);
  20.     }
  21.  
  22.     public Integer exibeIdadeMedia(){
  23.         return super.idade;
  24.     }
  25.  
  26. }
  27.  
  28. /*
  29. Também uma classe abstrata que herda da superclasse Animal e não implementa obrigatoritoriamente os métodos abstratos da classe mãe, por ser também uma classe abstrata.
  30. Contém o método abstrato mamar() e um método concreto que pode sofrer override (sobrescrita) por outra classe que seja sua filha e também possui um método concreto que pode ser chamado pela classe filha ou outra classe que não faça parte da linhagem, desde que a classe filha da classe Mamífero, seja uma classe concreta (Gato), ou seja, que poderá ser instanciada por uma classe qualquer, que poderá fazer uso dos métodos herdados dessa classe filha, desde que a sobrescrita na classe filha, mantenha a visibilidade pública.
  31. Contém o método exibeIdadeMedia(), que mostra o conteúdo do atributo idade, utilizando-se a palavra reservada "super" para poder se referenciar à essa variável da superclasse, que advém da classe Mãe (Animal), e que pode ser utilizado nas classes que podem não fazer parte da linhagem, porém que instanciem objetos de uma classe concreta que seja filha da classe Mamífero.*/
  32.  
  33.  
  34.  
  35. public with sharing class Gato extends Mamifero{
  36.  
  37.     public Gato(){
  38.         super.idade = 18;
  39.     }
  40.     public override void locomover(){
  41.         System.debug('O gato anda e corre - gestacao: '+super.gestacao);
  42.     }
  43.     public override Boolean mamar(){
  44.         return true;
  45.     }
  46.     public void miar(){
  47.         System.debug('miau');
  48.     }
  49. }
  50.  
  51. //Classe concreta que herda da classe Mamífero, que por sua vez, herda da classe Animal.
  52. //Pode-se fazer o uso da palavra "super", para fazer referência à qualquer atributo das classe ascendentes.
  53. //Utiliza-se a palavra reservada override (polismorfismo) para se reescrever o método de uma classe abstrata (obrigatoriamente), diferentemente de quando se implementa uma interface, que não necessita da palavra override.
  54.  
  55.  
  56.  
  57.  
  58. public interface Oviparos {
  59.     void botarOvos();
  60.  
  61. }
  62.  
  63. //Interface para ser implementada pela classe concreta Ornitorrinco, além desta classe extender ou herdar da classe Mamíferos.
  64. //No caso da interface, não é possível utilizar as keywords with sharing, without sharing e inherited sharing
  65. //o método para ser implementado só precisa do tipo de retorno, nome e portanto assinatura.
  66. //Na classe, utiliza-se a palavra "implements" para poder implementar os métodos da interface.
  67. //Na interface não é possível a implementação de nenhum método e esta também, como a classe abstrata, não pode ser instanciada.
  68.  
  69.  
  70. public with sharing class Ornitorrinco extends Mamifero implements Oviparos{
  71.    
  72.     public override void locomover(){
  73.         System.debug('O ornitorrinco nada e anda');
  74.     }
  75.  
  76.     public override Boolean mamar(){
  77.         return true;
  78.     }
  79.  
  80.     public override void seAlimentar(String msg){
  81.         System.debug(msg);
  82.     }
  83.  
  84.     public void botarOvos(){
  85.         System.debug('O ornitorrinco bota ovos');
  86.     }
  87.  
  88. }
  89.  
  90. //Essa classe herda, assim como a classe Gato, de Mamífero e consequentemente de Animal, e portanto é obrigatória a implementação dos métodos abstratos dessas classes ascendentes.
  91. //Implementa o método botarOvos(), que foi declarado na interface Ovíparos, obrigatoriamente.
  92.  
  93.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement