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 软硬件接口文档设计 一般的产品都包含硬件和软件两部分,产品设计阶段需要确保硬件开发人员和软件开发的沟通准确、高效。所以需要一份书面的文档来承载软件和硬件之间的沟通细节。以下面的细水雾除尘设备为例进行讲解,涉及软件和硬件的接口ÿ…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...