CALL METHOD-Abstract class 和 public class的调用


ABAP程序中今天会用到CALL METHOD即调用类方法,类似CALL FUNCTION。

以SAP中的两个类为例:CL_GUI_CFW,CL_GUI_ALV_GRID。

调用格式如下:

CALL METHOD cl_gui_cfw=>dispatch
*  IMPORTING
*    return_code =
    .

*DATA: g_grid           TYPE REF TO cl_gui_alv_grid.

*CREATE OBJECT g_grid
*  EXPORTING
**   i_shellstyle      = 0
**   i_lifetime        =
*    i_parent          = g_dock_container
*  EXCEPTIONS
*    error_cntl_create = 1
*    error_cntl_init   = 2
*    error_cntl_link   = 3
*    error_dp_create   = 4
*    OTHERS            = 5.
*IF sy-subrc <> 0.
*  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*ENDIF.

*CALL METHOD g_grid->set_table_for_first_display
**  EXPORTING
**    i_buffer_active               =
**    i_bypassing_buffer            =
**    i_consistency_check           =
**    i_structure_name              =
**    is_variant                    =
**    i_save                        =
**    i_default                     = 'X'
**    is_layout                     =
**    is_print                      =
**    it_special_groups             =
**    it_toolbar_excluding          =
**    it_hyperlink                  =
**    it_alv_graphics               =
**    it_except_qinfo               =
**    ir_salv_adapter               =
*  CHANGING
*    it_outtab                     =
**    it_fieldcatalog               =
**    it_sort                       =
**    it_filter                     =
**  EXCEPTIONS
**    invalid_parameter_combination = 1
**    program_error                 = 2
**    too_many_lines                = 3
**    others                        = 4
*        .
*IF sy-subrc <> 0.
** Implement suitable error handling here
*ENDIF.


这里我们会发现一个现象:调用类CL_GUI_CFW不需要实例化对象,而调用类CL_GUI_ALV_GRID需要实例化一个对象。

原因如下:

通过T-CODE:SE24可以知道类型的属性CL_GUI_CFW属性Abstract,CL_GUI_ALV_GRID属性Public,如下所示:

CALL METHOD-Abstract class 和 public class的调用_第1张图片

如此可知我们在CALL属性为Abstract的类时,无需进行实例化,而CALL属性为Public的类时,需要进行实例化操作。


如何自动调用METHOD的那?系统提供自动插入的操作

1.点击“pattern”选择“ABAP Objects Patterns”然后回车,如下:

CALL METHOD-Abstract class 和 public class的调用_第2张图片

CALL METHOD-Abstract class 和 public class的调用_第3张图片

2.调用method

2.1调用属性为abstract的类

CALL METHOD-Abstract class 和 public class的调用_第4张图片

2.2调用属性为Public的类

首先实例化该类的一个对象

DATA:g_grid           TYPE REF TO cl_gui_alv_grid.

CALL METHOD-Abstract class 和 public class的调用_第5张图片

然后调用类

CALL METHOD-Abstract class 和 public class的调用_第6张图片


ok~~!

更多一点的信息可以查询:http://zevolving.com/2012/01/abstract-class-vs-interface/



你可能感兴趣的:(method,call,abstract,public,调用类)