What is the difference between overloading and overriding in OOPs?

DescriptionOverloadingOverriding
AchievedIt is achieved by having different methods with the same name and different signatureIt is achieved by redefining the method in the sub class. The class is originally defined in the super class.
SameThe methods names are the same. Only the signature varies.The method definition (name) including the signature are similar. It is only redefined. But the implementation of the method is changed.
RelationshipThe relationship is between the methods in the same class.The relationship is between the methods in the super and sub class.
ABAPIt is not explicitly supported in SAP ABAP. But it can be implicitly implemented through the concept of OPTIONAL keyword in method definition.This overriding can be explicitly implemented in SAP ABAP. The REDEFINITION keyword is used in the method definition of sub class.
ExampleA movie can be dubbed in different languages. The title and the characters are similar. Only the parameters such as Dialogue Delivery are different. Thus the movie is overloaded in different languages.A movie can be remaked. Its parameters are similar. But the storyline and its content can be changed according to the viewers. Thus the movies are redefined.

How to create different SARS COVID variants in SAP ABAP

Required Elements in creating the classifications.

  • Structure – It includes the details such as variant id, variant name, amino acid changes, potential, spread.
  • Interface Definition – The variant details of the sars covid 2 will be handled here.
  • Abstract super class definition – This class implements the interface. The constructor is used to set the details of the variant.
  • Sars covid variant 1 sub class definition – It inherits the Abstract super class definition.
  • Report creation – It creates the instances of the sars covid 2 variant.

Structure definition:

Before creating the structure, let’s define the Data elements for the fields of the structure. All the fields of the structure can be defined with string type of data element. The variant can be identified with the key element as variant id.Let’s create a data element as ‚ZDE_Variant_string‘ with string type domain. Another Data element ZDE_VARIANT_ID with int4 type domain.

Let’s define the structure name ‚ZSVARIANT_DETAILS‘ with description

The fields of the structure are created as shown below.

  • Field = Variant_id , Data element = ZDE_VARIANT_ID, Domain type INT4
  • Field = Variant_name, Data element = ZDE_VARIANT_STRING, Domain type STRING
  • Field = amino acid changes, Data element = ZDE_VARIANT_STRING, Domain type STRING
  • Field = Potential, Data element = ZDE_VARIANT_STRING, Domain type STRING
  • Field = Spread, Data element = ZDE_VARIANT_STRING, Domain type STRING

Interface definition:

INTERFACE zif_sars_covid_2_variants

    PUBLIC.

METHODS get_variant_details EXPORTING es_variant_details TYPE zsvariant_details.

ENDINTERFACE.

Abstract super class definition and implementation:

CLASS zcl_sars_covid_2 DEFINITION.

    PUBLIC

    ABSTRACT

    CREATE PUBLIC.

     PUBLIC SECTION.

                INTERFACES zif_sars_covid_2_variants.

                METHODS constructor IMPORTING is_variant_details TYPE zsvariant_details.

    PROTECTED SECTION.

    PRIVATE SECTION.

                DATA ps_variant_details TYPE zsvariant_details.

ENDCLASS.

CLASS zcl_sars_covid_2 IMPLEMENTATION.

                METHOD zif_sars_covid_2_variants~get_variant_details.

                               Es_variant_details = ps_variant_details.

                ENDMETHOD.

                METHOD constructor.

                               Ps_variant_details = is_variant_details.

                ENDMETHOD.

ENDCLASS.

Sars covid variant 1 sub class definition

CLASS zcl_sars_covid_variant1  DEFINITION

PUBLIC

INHERITING FROM zcl_sars_covid_2

FINAL

CREATE PUBLIC.

PUBLIC SECTION.

PROTECTED SECTION.

PRIVATE SECTION.

ENDCLASS.

CLASS zcl_sars_covid_variant1 IMPLEMENTATION.

ENDCLASS.

REPORT TO CREATE INSTANCES OF THE COVID 2 VARIANTS.

REPORT zpr_sars_covid_program.

DATA lr_variant1 TYPE REF TO zcl_sars_covid_variant1.

DATA lr_variant2 TYPE REF TO zcl_sars_covid_variant1.

DATA lr_variant3 TYPE REF TO zcl_sars_covid_variant1.

DATA lt_variant_details TYPE TABLE OF ztvariant_details.

DATA ls_variant_details TYPE zsvariant_details.

DATA ls_print_variant_details TYPE zsvariant_details.

FIELD-SYMBOLS <lv_field> TYPE any.

Ls_variant_details-variant_id = 001.

Ls_variant_details-variant_name = ‚VOC 202012/01‘.

Ls_variant_details-amino_acid_changes = ‚ S: del 69-70, del 144, N501Y, A570D, P681H, T716I, S982A, D1118H‘‘.

Ls_variant_details-potential = ‚ increased transmissibility‘

Ls_variant_details-spread = ‚ UK and other european countries‘.

Lr_variant1 = NEW zcl_sars_covid_variant1( is_variant_details = ls_variant_details ).

Lr_variant1->zif_sars_covid_2_variants~get_variant_details( IMPORTING

                                                                                              Es_variant_details = ls_print_variant_details ).

WRITE: / ‚Variant ID:‘, ls_print_variant_details-Variant_id.

WRITE:/ ,Variant name:‘, ls_print_variant_details-variant_name.

WRITE:/ ,Amino acid changes:‘, ls_print_variant_details-amino_acid_changes.

WRITE:/ ,Potential:‘, ls_print_variant_details-potential.

WRITE:/ ,Spread:‘, ls_print_variant_details-spread.

Ls_variant_details-variant_id = 002.

Ls_variant_details-variant_name = ‚ 501.V2‘.

Ls_variant_details-amino_acid_changes = ‚S: D80A, D215G, E484K, N501Y and A701V‘.

Ls_variant_details-potential = ,increased transmissibility‘

Ls_variant_details-spread = ‚ South Africa, two cases recently detected in the UK‘.

Lr_variant2 = NEW zcl_sars_covid_variant1( is_variant_details = ls_variant_details ).

Lr_variant2->zif_sars_covid_2_variants~get_variant_details( IMPORTING

                                                                                              Es_variant_details = ls_print_variant_details ).

Ls_variant_details-variant_id = 003.

Ls_variant_details-variant_name = ‚Danish mink variant‘.

Ls_variant_details-amino_acid_changes = ‚ S: del 69-70, Y453F‘.

Ls_variant_details-potential = , Transmission from mink to humans and community spread confirmed without any change in transmissibility‘

Ls_variant_details-spread = ‚ Denmark‘.

Lr_variant3 = NEW zcl_sars_covid_variant1( is_variant_details = ls_variant_details ).

Lr_variant3->zif_sars_covid_2_variants~get_variant_details( IMPORTING

                                                                                              Es_variant_details = ls_print_variant_details ).

WRITE: / ‚Variant ID:‘, ls_print_variant_details-Variant_id.

WRITE:/ ,Variant name:‘, ls_print_variant_details-variant_name.

WRITE:/ ,Amino acid changes:‘, ls_print_variant_details-amino_acid_changes.

WRITE:/ ,Potential:‘, ls_print_variant_details-potential.

WRITE:/ ,Spread:‘, ls_print_variant_details-spread.

References: Covid variant details are taken from below report.

European centre for Disease Prevention and Control: Risk related to spread of new SARSCoV-2 variants of concern in the EU/EEA

How to interpret Inheritance in SAP ABAP object oriented programming

INHERITANCE EXAMPLE

CLASS zcl_big_boss DEFINITION PUBLIC CREATE PUBLIC.

   PUBLIC SECTION.

   METHODS set_name IMPORTING i_name TYPE string.

   METHODS get_name EXPORTING e_name TYPE string.

   METHODS set_age IMPORTING i_age TYPE int4.

   METHODS get_age EXPORTING e_age TYPE int4.

   METHODS set_profession IMPORTING i_profession TYPE string.

   METHODS get_profession EXPORTING e_profession TYPE string.

   PROTECTED SECTION.

   PRIVATE SECTION.

   DATA p_name TYPE string.

   DATA p_age TYPE int4.

   DATA p_profession TYPE string.

ENDCLASS.

CLASS zcl_big_boss IMPLEMENTATION.

METHOD set_name.

  p_name = i_name.

ENDMETHOD.

METHOD get_name.

  e_name = p_name.

ENDMETHOD.

METHOD set_age.

   P_age = i_age.

ENDMETHOD.

METHOD get_age.

   E_age = p_age.

ENDMETHOD.

METHOD set_profession.

   P_profession = i_profession.

ENDMETHOD.

METHOD get_profession.

   E_profession = p_profession.

ENDMETHOD.

ENDCLASS.

CLASS zcl_candidate DEFINITION INHERITING FROM zcl_big_boss

PUBLIC

FINAL

CREATE PUBLIC.

PUBLIC SECTION.

METHODS set_big_boss_charac TYPE string.

METHODS get_big_boss_charac TYPE string.

PROTECTED SECTION.

  DATA pro_big_boss_charac TYPE string.

PRIVATE SECTION.

ENDCLASS.

CLASS zcl_candidate IMPLEMENTATION.

METHOD set_big_boss_charac.

                Pro_big_boss_charac = i_big_boss_charac.

ENDMETHOD.

METHOD get_big_boss_charac.

                e_big_boss_charac = pro_big_boss_charac.

ENDMETHOD.

ENDCLASS.

REPORT TO ACCESS GETTER AND SETTER METHODS.

DATA lr_candidate TYPE REF TO zcl_candidate.

DATA l_name TYPE string.

DATA l_age TYPE int4.

DATA l_profession TYPE string.

DATA l_big_boss_charac TYPE string.

Lr_candidate = NEW zcl_candidate( ).

Lr_candidate->set_name(  EXPORTING i_name = ‚Bala‘ ).

Lr_candidate->set_age( EXPORTING i_age = 24 ).

Lr_candidate->set_profession( EXPORTING i_profession = ‚Model‘ ).

Lr_candidate->set_big_boss_charac( EXPORTING i_big_boss_charac = ‚Open Talk‘ ).

 Lr_candidate ->get_name( IMPORTING e_name = l_name ).

Lr_candidate ->get_age( IMPORTING e_age = l_age ).

Lr_candidate ->get_profession( IMPORTING e_profession = l_profession ).

Lr_candidate->get_big_boss_charac( IMPORTING e_big_boss_charac = l_big_boss_charac ).

WRITE: / ‚NAME OF THE CONTESTANT:‘ , l_name.

WRITE:/ ,AGE OF THE CONTESTANT:‘; l_age.

WRITE:/ ,PROFESSION OF THE CONTESTANT:‘, L_PROFESSION.

WRITE:/ ‚Big boss characteristics‘, l_big_boss_charac

How to do encapsulation in SAP ABAP

CLASS big_boss DEFINITION.

   PUBLIC SECTION.

   METHODS set_name IMPORTING i_name TYPE string.

   METHODS get_name EXPORTING e_name TYPE string.

   METHODS set_age IMPORTING i_age TYPE int4.

   METHODS get_age EXPORTING e_age TYPE int4.

   METHODS set_profession IMPORTING i_profession TYPE string.

   METHODS get_profession EXPORTING e_profession TYPE string.

   PROTECTED SECTION.

   PRIVATE SECTION.

   DATA p_name TYPE string.

   DATA p_age TYPE int4.

   DATA p_profession TYPE string.

ENDCLASS.

CLASS big_boss IMPLEMENTATION.

METHOD set_name.

  p_name = i_name.

ENDMETHOD.

METHOD get_name.

  e_name = p_name.

ENDMETHOD.

METHOD set_age.

   P_age = i_age.

ENDMETHOD.

METHOD get_age.

   E_age = p_age.

ENDMETHOD.

METHOD set_profession.

   P_profession = i_profession.

ENDMETHOD.

METHOD get_profession.

   E_profession = p_profession.

ENDMETHOD.

ENDCLASS.

REPORT TO ACCESS GETTER AND SETTER METHODS.

DATA lr_bigboss TYPE REF TO bigboss.

DATA l_name TYPE string.

DATA l_age TYPE int4.

DATA l_profession TYPE string.

Lr_bigboss = NEW bigboss( ).

Lr_bigboss->set_name(  EXPORTING i_name = ‚Bala‘ ).

Lr_bigboss->set_age( EXPORTING i_age = 24 ).

Lr_bigboss->set_profession( EXPORTING i_profession = ‚Model and Mr. India‘ ).

 Lr_bigboss->get_name( IMPORTING e_name = l_name ).

Lr_bigboss->get_age( IMPORTING e_age = l_age ).

Lr_bigboss->get_profession( IMPORTING e_profession = l_profession ).

WRITE: / ‚NAME OF THE CONTESTANT:‘ , l_name.

WRITE:/ ,AGE OF THE CONTESTANT:‘; l_age.

WRITE:/ ,PROFESSION OF THE CONTESTANT:‘, L_PROFESSION.