ABAP开发-面向对象开发_2
系列文章目录
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 接口和类
- 1、首先创建一个接口
- 2、在创建的接口的基础上创建一个类PERSON
- 3、创建子类STUDENT
- 4、创建子类TEACHER
- 5、SE38使用创建的类
- 总结
文章目录
- 系列文章目录
- @[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 是用接口定义的,这里面只能访问接口中包含的方法
执行结果如下:
总结
相关文章:

ABAP开发-面向对象开发_2
系列文章目录 文章目录 系列文章目录[TOC](文章目录) 前言接口和类1、首先创建一个接口2、在创建的接口的基础上创建一个类PERSON3、创建子类STUDENT4、创建子类TEACHER5、SE38使用创建的类 总结 前言 接口和类 全局类 SE24 创建一个接口-》创建一个实现接口的类-》再创建两个…...

微信小程序-prettier 格式化
一.安装prettier插件 二.配置开发者工具的设置 配置如下代码在setting.json里: "editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml"…...
241118学习日志——[CSDIY] [ByteDance] 后端训练营 [06]
CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…...

Android WMS概览
WMS(WindowManagerService)是 Android 系统的核心服务,负责管理应用和系统的窗口,包括窗口的创建、销毁、布局、层级管理、输入事件分发以及动画显示等。它通过协调 InputManager 和 SurfaceFlinger 实现触摸事件处理和窗口渲染&a…...

新一代API开发工具,让API调试更快 更简单
新一代API开发工具 代理调试 请求测试一站式解决方案 Reqable Fiddler Charles Postman, 让API调试更快 🚀 更简单 👌 直接上下载地址 根据系统,下载对应的版本即可 https://reqable.com/zh-CN/download/...
友元类和友元函数
友元函数的定义: 友元函数是在类定义中被声明为 “朋友” 的非成员函数。它可以访问类的私有成员和保护成员(变量和方法),就好像它是类的成员函数一样。友元函数的声明以friend关键字开头,在类的内部进行声明,但它的定义在类的外部ÿ…...

Sulfo-Cy5-Iodoacetamide能够发出明亮的荧光信号,使得生物样本的精细结构得以清晰呈现
一、基本信息 英文名称:Sulfo-Cy5-Iodoacetamide,Sulfo-Cyanine5-Iodoacetamide,Sulfo Cy5 IA 中文名称:磺酸Cy5碘乙酰胺 分子式:C36H44IKN4O8S2 分子量:890.89 纯度:≥95% 外观ÿ…...

Python中的TCP
文章目录 一. 计算机网络1. 网络的概念2. IP地址① IP地址的概念② IP地址的表现形式③ IP地址的作用④ 网络查询命令Ⅰ. ifconfig/ipconfigⅡ. ping 3. 端口和端口号的概念(计算机通信原理)① 端口的概念② 端口号的概念 4. socket套接字① socket概念② socket使用场景 二. T…...

CSS(8)高级技巧:精灵图,css三角,用户界面,vertical-align属性应用
一.精灵图 通过css中的background-position属性,将多张图合成为一张图 二.css三角 在网页中,我们可以添加css属性获得三角图标 solid:实心,边框的实心 transparent:透明,图中代码表示只有左边粉色,其余地方为透明 三ÿ…...

Flink新版Source接口源码解析
目录 1. 前言 2. Source解析 2.1 Source类图 2.2 接口和方法说明 2.2.1 Source,> 3. SplitEnumerator解析 3.1 SplitEnumetator类图 3.2 类和方法说明 3.2.1 SplitEnumerator 3.2.2 SimpleVersionedSerializer 4. SourceReader解析 4.1 SourceReader类图 4.2 类…...

SLM561A系列60V10-50mA单通道线性恒流LED驱动芯片,为汽车照明、景观照明助力
SLM561A系列选型参考: SLM561A10ae-7G SOD123 SLM561A15ae-7G SOD123 SLM561A20ae-7G SOD123 SLM561A25ae-7G SOD123 SLM561A30ae-7G SOD123 SLM561A35ae-7G SOD123 SLM561A40ae-7G SOD123 SLM561A45ae-7G SOD123 SLM561A50ae-7G SOD123 S…...

一次失败的wxpython安装macOS M1
WARNING: The scripts libdoc, rebot and robot are installed in /Users/用户名/Library/Python/3.8/bin which is not on PATH. 背景:想在macos安装Robot Framework ,显示pip3不是最新,更新pip3后显示不在PATH上 参看博主文章末尾 MAC系统…...

【大数据技术基础 | 实验十一】Hive实验:新建Hive表
文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤(一)启动Hive(二)创建表(三)显示表(四)显示表列(五)更改表(六&am…...
【yarn】yarn rest api每日job数量分析
一、说明 # 无法制定时间范围!!! yarn application -list 官方文档 rest返回内容(官网案例): {app":{"id":"application_1324057493980_0001","user":"user1&q…...

蓝桥杯单片机第十一届省赛(第一场)
主函数代码 #include<iic.h> #include<intrins.h>sfr P40xc0; sbit R3P3^2; sbit R4P3^3; sbit C4P3^4; sbit C3P3^5;unsigned char code led_nodot[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char code led_dot[]{0x40,0x79,0x24,0x30,0x…...

hive复杂数据类型Array Map Struct 炸裂函数explode
1、Array的使用 create table tableName( ...... colName array<基本类型> ...... ) 说明:下标从0开始,越界不报错,以null代替 arr1.txtzhangsan 78,89,92,96 lisi 67,75,83,94 王五 23,12 新建表: create table arr1(n…...

FIFO架构专题-FIFO是什么
目录 简介: FIFO参数: 1.宽度WIDTH(一次位数) 2.深度DEEPTH(存多少次) FIFO的分类: 同步FIFO 异步FIFO 读写位宽不同的FIFO FIFO信号介绍 写时钟 写数据 写使能 读时钟 读数据 读…...
Pythony——多线程简单爬虫实现
简单爬虫实现 import requests from bs4 import BeautifulSoup# 生成要爬取的网页地址列表,这里是博客园的分页地址,从第1页到第50页 urls [f"https://www.cnblogs.com/#p{i}" for i in range(1, 50 1)]# 生产者函数——负责下载网页内容 d…...
如何修改 a 链接的样式
在CSS中,你可以使用选择器来针对HTML中的特定元素(例如<a>标签,也就是链接)进行修改样式。以下是一些常见的修改<a>链接样式的方法: 移除下划线: a { text-decoration: none; } 修改链接的…...

第6章 详细设计-6.5 软硬件接口文档设计
6.5 软硬件接口文档设计 一般的产品都包含硬件和软件两部分,产品设计阶段需要确保硬件开发人员和软件开发的沟通准确、高效。所以需要一份书面的文档来承载软件和硬件之间的沟通细节。以下面的细水雾除尘设备为例进行讲解,涉及软件和硬件的接口ÿ…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...