当前位置: 首页 > news >正文

ABAP开发-面向对象开发_2

系列文章目录


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 接口和类
    • 1、首先创建一个接口
    • 2、在创建的接口的基础上创建一个类PERSON
    • 3、创建子类STUDENT
    • 4、创建子类TEACHER
    • 5、SE38使用创建的类
  • 总结

前言


接口和类

全局类
SE24 创建一个接口-》创建一个实现接口的类-》再创建两个子类-》SE38 使用创建的类

1、首先创建一个接口

TCODE:SE24
在这里插入图片描述
在这里插入图片描述
定义属性,其中,级别:Instance Attribute–实例属性,Static Attribute–静态属性,Constant常量
在这里插入图片描述
在这里插入图片描述
定义方法
在这里插入图片描述
只定义方法还不够,若某方法需要传入参数传出参数等,则点击某方法,再点击”参数“,如下
在这里插入图片描述
若是设传入参数,则类型选IMPORTING;
另:Exporting传出参数,Changing改,Returning返回
在这里插入图片描述
同样的,GET_ID方法则需要返回一个值,也给他设置参数
在这里插入图片描述
填入参数,类型(类型就选Returning),关联类型
在这里插入图片描述
同样的,为set_name和get_name设置参数,如下
在这里插入图片描述
在这里插入图片描述
最后,检查-》激活-》保存

2、在创建的接口的基础上创建一个类PERSON

在这里插入图片描述
填写描述,取消勾选”最终“(若可能会被用到就不勾,若不会再被用到就勾上“最终”)
在这里插入图片描述
点击“接口”选择卡,填入我们上面创建的接口ZIF_YT36_PERSON_36130
在这里插入图片描述
回车,此时会带出来描述–人接口、属性、方法
可以看到,属性和方法都是pubilc公开的(因为是接口里面定义的,接口里面定义的都是可见的,因为接口里面的属性和方法就是要让被使用)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击检查后,会有很多警告,是因为还没实现这些方法
在这里插入图片描述
此时,要实现各个方法,就要双击各方法,去编写程序
双击ZIF_YT36_PERSON_36130~SET_ID
在这里插入图片描述

  method ZIF_YT36_PERSON_36130~SET_ID.
ZIF_YT36_PERSON_36130~ID = IV_ID."用传入的ID给接口属性赋值endmethod.

检查-》激活
再编写GET_ID方法,检查-》激活

  method ZIF_YT36_PERSON_36130~GET_ID.RV_ID = ZIF_YT36_PERSON_36130~ID ."返回接口属性里的值endmethod.

同样的,编写SET_NAME,检查-》激活

  method ZIF_YT36_PERSON_36130~SET_NAME.
ZIF_YT36_PERSON_36130~NAME = IV_NAME."传入的参数iv_name给接口赋值endmethod.

编写GET_NAME,检查-》激活

  method ZIF_YT36_PERSON_36130~GET_NAME.RV_NAME = ZIF_YT36_PERSON_36130~NAME.endmethod.

再在类里加一个方法GET_FULL_NAME,此时,是可以选可见性的,而不是像在接口里的方法那样都是public
在这里插入图片描述
给该方法定义参数
在这里插入图片描述
填入参数、类型、关联类型
在这里插入图片描述
点击源代码,就可以进到实现该方法的程序里面,编写程序

method GET_FULL_NAME.RV_FULLNAME =  ZIF_YT36_PERSON_36130~ID && ':' &&  ZIF_YT36_PERSON_36130~NAME.endmethod.

3、创建子类STUDENT

(1)
在这里插入图片描述
在这里插入图片描述
点击属性-》超类(SUPER CLASS)
在这里插入图片描述
填写超类,即创建的第一个类ZCL_YT36_PERSON_36130,保存
在这里插入图片描述
保存后就可以看到从父类继承过来的属性和方法,如下:
在这里插入图片描述
在这里插入图片描述
这时如果双击各个方法,就会弹出该方法是在父类中实施的
在这里插入图片描述
(2)
如果想在GET_FULL_NAME中实现一些student子类中的独特方法,则点击GET_FULL_NAME->再点击“重新定义方法”
在这里插入图片描述

  method GET_FULL_NAME.
"先调父类里面的方法GET_FULL_NAME
CALL METHOD SUPER->GET_FULL_NAMERECEIVING"父类的方法有个return,所以用recive来接收RV_FULLNAME = RV_FULLNAME."第一个RV_FULLNAME 是父类里面的参数,第二个 RV_FULLNAME是这个方法里要返回的参数RV_FULLNAME = '学生' && RV_FULLNAME.   endmethod.

然后检查-》激活

若不想要重定义的方法了,就点击该方法-》点击撤消重定义
在这里插入图片描述
(3)若想再在这个STUDENT类中加一些属于自己的属性和方法
属性:
在这里插入图片描述
方法:并设置参数
在这里插入图片描述
传入参数设好后,再点源代码
在这里插入图片描述

  method SET_SCORE.SCORE = IV_SCORE."传入参数给该STUDENT类的属性SCORE赋值endmethod.

在这里插入图片描述
在这里插入图片描述

4、创建子类TEACHER

在这里插入图片描述
同样的,点击超类,输入类PERSON,保存
在这里插入图片描述
重定义GET_FULL_NAME

  method GET_FULL_NAME.
CALL METHOD SUPER->GET_FULL_NAMERECEIVINGRV_FULLNAME = RV_FULLNAME.RV_FULLNAME = '老师' && RV_FULLNAME.endmethod.

添加属性–工资GONGZI
在这里插入图片描述
添加方法–SET_GONGZI,GET_GONGZI
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

`在这里插入代码片`  method SET_GONGZI.
GONGZI = IV_GONGZI.endmethod.
  method GET_GONGZI.RV_GONGZ = GONGZI.endmethod.

添加方法–GET_HOLIDAY
在这里插入图片描述
并添加参数,设一个返回值
在这里插入图片描述

添加源代码

  method GET_HOLIDAY.RV_HOLIDAY = '教师节'.endmethod.

5、SE38使用创建的类

在这里插入图片描述
在这里插入图片描述
编写程序,点击模式
在这里插入图片描述
选择ABAP对象模式
在这里插入图片描述
填上实例,类/接口,方法,点击确定
在这里插入图片描述
则代码中就会自动出现一个模式,我们只需填入参数
在这里插入图片描述
同样的,调用GET方法
在这里插入图片描述
在这里插入图片描述
检查激活执行,执行结果如下:
在这里插入图片描述
除了点模式自动生成调用方法,也可以按如下语法来自己写(不用点模式)

*2、创建学生1
*要求创建学生
*调用SET ID/GET ID/SET_NAME/GET_FULLNAME/SET_SCORE/GET_SCORE ,可以向上面一样,点模式(call method),也可以不点模式,按如下语法写
*输出学生ID/FULLNAME/SCOREDATA: LO_STU1 TYPE REF TO zcl_yt36_STUDENT_36130.
CREATE OBJECT LO_STU1."实例化LO_STU1->ZIF_YT36_PERSON_36130~set_id( iv_id = 1 ).
DATA(LV_SID1) = LO_STU1->ZIF_YT36_PERSON_36130~Get_id( )."定义一个变量LV_SID1来接收返回值
WRITE: / '学生ID是:',LV_SID1.LO_STU1->ZIF_YT36_PERSON_36130~SET_NAME( IV_NAME = 'STU 1').
DATA(LV_STU_NAME1) = LO_STU1->GET_FULL_NAME( ).
WRITE: / '学生名字是:',LV_STU_NAME1.LO_STU1->SET_SCORE( IV_SCORE = 100 ).
WRITE: / '成绩:',LO_STU1->GET_SCORE( ).

另外,多态和接口

*3、多态
DATA: LO_PERSON3 TYPE REF TO ZCL_YT36_PERSON_36130."用父类定义一个对象
CREATE OBJECT LO_PERSON3 TYPE ZCL_YT36_TEACHER_36130."创建对象的时候,指定一个子类的类型
WRITE: / LO_PERSON3->GET_FULL_NAME( )."调用的是老师的FULL_NAME,因为创建对象的时候,指定的子类的类型是TEACHER
"多态:根据创建对象的类型不同,调用不同的方法实现DATA: LO_PERSON4 TYPE REF TO ZCL_YT36_PERSON_36130."用父类定义一个对象
CREATE OBJECT LO_PERSON4 TYPE ZCL_YT36_STUDENT_36130."创建对象的时候,指定一个子类的类型
WRITE: / LO_PERSON4->GET_FULL_NAME( )."调用的是学生的full_name,因为创建对象的时候,指定的子类的类型是STUDENT
"LO_PERSON4->GET_SCORE( )."因为我们用 ZCL_YT36_PERSON_36130定义的对象,所以没办法访问子类特殊的方法和属性
"不可以这样写,因为定义的时候ref to ZCL_YT36_PERSON_36130,PERSON里面有哪个方法,才可以调用哪个方法,person里没有GET_SCORE
"虽然创建对象的时候,指定的子类型是STUDENT,但是能调用哪些方法是由定义的时候REF TO来决定的
"而创建对象指定的子类型决定的是调用的方法具体走到哪个实现的类,53行*使用接口
DATA: LO_INTERFACE TYPE REF TO ZCL_YT36_PERSON_36130.
CREATE OBJECT LO_INTERFACE TYPE ZCL_YT36_STUDENT_36130.LO_INTERFACE->SET_NAME( IV_NAME = '接口调用' ).
WRITE: / LO_INTERFACE->GET_NAME( )."LO_INTERFACE->GET_FULL_NAME( )."因为LO_INTERFACE 是用接口定义的,这里面只能访问接口中包含的方法

执行结果如下:
在这里插入图片描述


总结

http://www.lryc.cn/news/486938.html

相关文章:

  • 微信小程序-prettier 格式化
  • 241118学习日志——[CSDIY] [ByteDance] 后端训练营 [06]
  • Android WMS概览
  • 新一代API开发工具,让API调试更快 更简单
  • 友元类和友元函数
  • Sulfo-Cy5-Iodoacetamide能够发出明亮的荧光信号,使得生物样本的精细结构得以清晰呈现
  • Python中的TCP
  • CSS(8)高级技巧:精灵图,css三角,用户界面,vertical-align属性应用
  • Flink新版Source接口源码解析
  • SLM561A系列60V10-50mA单通道线性恒流LED驱动芯片,为汽车照明、景观照明助力
  • 一次失败的wxpython安装macOS M1
  • 【大数据技术基础 | 实验十一】Hive实验:新建Hive表
  • 【yarn】yarn rest api每日job数量分析
  • 蓝桥杯单片机第十一届省赛(第一场)
  • hive复杂数据类型Array Map Struct 炸裂函数explode
  • FIFO架构专题-FIFO是什么
  • Pythony——多线程简单爬虫实现
  • 如何修改 a 链接的样式
  • 第6章 详细设计-6.5 软硬件接口文档设计
  • 【pyspark学习从入门到精通14】MLlib_1
  • C++全局构造和初始化
  • 安全见闻-泷羽sec课程笔记
  • 游戏引擎学习第17天
  • 【FFmpeg】FFmpeg 内存结构 ③ ( AVPacket 函数简介 | av_packet_ref 函数 | av_packet_clone 函数 )
  • 【学习笔记】量化概述
  • 同步互斥相关习题10道 附详解
  • 【Python · PyTorch】卷积神经网络 CNN(LeNet-5网络)
  • Git 拉取指定分支创建项目
  • CF862B Mahmoud and Ehab and the bipartiteness(二分图的性质)
  • React Native 全栈开发实战班 :数据管理与状态之React Hooks 基础