Inheritance (herança)
Programação orientada a objetos permite que classes possam herdar estados e comportamentos comuns usados de outras classes. Neste exemplo, bicicleta torna-se agora a superclasse de MountainBike. Na linguagem de programação, cada classe é permitido ter uma superclasse direta, e cada superclasse tem o potencial para um número ilimitado de subclasses.
Override
Métodos Override (substituição), em programação orientada a objeto, é um recurso de linguagem que permite que uma subclasse ou classe filha possa fornecer uma implementação específica de um método que já é fornecido por uma de suas superclasses ou classes pai.
A implementação Override das subclasses substitui a implementação na superclasse, fornecendo um método que tem o mesmo nome, mesmos parâmetros ou assinatura, e mesmo tipo de retorno como o método na classe pai.
Final e Abstract
Abap possui o conceito de classes e métodos finais, uma classe final não pode ter uma subclasse. Um método final não pode ser redefinido em uma subclasse. Eles concluem uma árvore de herança.
Um método abstrato é definido em uma classe abstrata e não pode ser implementado na classe. Em vez disso, ele é implementado em uma subclasse da classe. Classes abstratas não podem ser instanciadas.
Redefinition
É a instrução na qual cria um método override. A implementação da redefinição na subclasse obscurece a implementação original na superclasse.
Exemplo:
Utilizando o exemplo de classes anterior onde definimos e implementamos a classe ZBICICLETA no Class Builder vamos criar uma subclasse desta superclasse, para isto precisamos modificar o parâmetro da classe que por default no R/3 é marcado como uma classe final, siga os passos abaixo:
- Entre no Class Builder, trasação SE24.
- Escolha a classe que criamos anteriormente ZBICICLETA e clique no botão Change.
- Na aba Properties, desmarque a opção Final, use como referencia a imagem abaixo:
Neste exemplo damos a classe BICICLETAMONTANHA todos os mesmos campos e métodos da classe bicicleta, e ainda permite que seu código se concentre exclusivamente sobre as características que a tornam única. Isso faz do código de suas subclasses fáceis de ler. Usamos métodos Override neste exemplo, para substituir o método BICICLETA da superclasse na subclasse.
No entanto, você deve tomar cuidado para documentar corretamente o estado e o comportamento que cada superclasse define, uma vez que o código não irá aparecer no arquivo de origem de cada subclasse.
Abap
*&---------------------------------------------------------------------* *& Report ZHERANCA *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Herança e Override *&---------------------------------------------------------------------* REPORT ZHERANCA. * Cria uma herança da classe ZBICICLETA CLASS BICICLETAMONTANHA DEFINITION INHERITING FROM ZBICICLETA. PUBLIC SECTION. DATA: marchas TYPE STRING, amortecedores TYPE STRING, garrafa TYPE STRING, gps TYPE STRING. METHODS BICICLETA REDEFINITION. ENDCLASS. CLASS BICICLETAMONTANHA IMPLEMENTATION. METHOD BICICLETA. CALL METHOD super->BICICLETA. WRITE : / ' Marchas:', marchas. WRITE : / ' Amortecedores:', amortecedores. WRITE : / ' Garrafa:', garrafa. WRITE : / ' Gps:', gps. ENDMETHOD. ENDCLASS. * Cria Instancia da Classe Herdada START-OF-SELECTION. DATA BIKE1 TYPE REF TO BICICLETAMONTANHA. CREATE OBJECT BIKE1. * Propriedades (Atributos) da classe ZBICICLETA. MOVE 'TRACK X100' TO BIKE1->MODELO. MOVE 'Fibra de Carbono' TO BIKE1->QUADRO. MOVE 'Disco' TO BIKE1->FREIOS. MOVE 'Aluminio' TO BIKE1->RODAS. * Propriedades (Atributos) da classe BICICLETAMONTANHA MOVE '18' TO BIKE1->MARCHAS. MOVE 'PRO III S' TO BIKE1->AMORTECEDORES. MOVE 'Aluminio 500 ml' TO BIKE1->GARRAFA. MOVE 'Discovery PRO' TO BIKE1->GPS. * chama método OVERRIDE. WRITE : / 'Bicicleta Montanha é uma herança da classe Bicicleta', / . CALL METHOD BIKE1->BICICLETA.