ABAP中Importing/Exporting参数与继承概念是否相似?
ABAP中Importing/Exporting/Changing参数详解与继承概念的区分
一、三个参数的核心概念
这些关键字是ABAP里定义方法数据流向的规则,用来明确方法和调用方之间数据的传入、传出逻辑,避免歧义:
Importing 参数
- 本质:调用方给方法传输入数据,方法内部只能读取这个值,语义上不允许修改原始传入的变量(引用类型例外,但核心是“输入”)。
- 场景:比如计算折扣价的方法,需要调用方传入原价,这个原价就是Importing参数。
Exporting 参数
- 本质:方法给调用方返回结果数据,方法执行完后把计算好的值传递回调用方的变量。
- 场景:上面例子里计算出来的折扣价,就是Exporting参数。
Changing 参数
- 本质:兼具输入和输出,调用方传一个变量进来,方法可以修改它的值,修改后的结果会直接回传给调用方的原变量。
- 场景:比如给库存数量减1的方法,传入的库存数既是输入(当前数量)也是输出(更新后的数量)。
代码示例
CLASS lcl_product DEFINITION. PUBLIC SECTION. METHODS calculate_discount IMPORTING iv_original_price TYPE i EXPORTING iv_discounted_price TYPE i. METHODS reduce_stock CHANGING cv_stock_qty TYPE i. ENDCLASS. CLASS lcl_product IMPLEMENTATION. METHOD calculate_discount. iv_discounted_price = iv_original_price * 0.8. " 打8折 ENDMETHOD. METHOD reduce_stock. cv_stock_qty = cv_stock_qty - 1. ENDMETHOD. ENDCLASS. " 调用示例 DATA(lo_product) = NEW lcl_product( ). DATA(lv_original) = 200. DATA(lv_discounted) = 0. DATA(lv_stock) = 10. lo_product->calculate_discount( EXPORTING iv_original_price = lv_original IMPORTING iv_discounted_price = lv_discounted ). WRITE: / '折扣价:', lv_discounted. " 输出160 lo_product->reduce_stock( CHANGING cv_stock_qty = lv_stock ). WRITE: / '更新后库存:', lv_stock. " 输出9
二、和类继承的本质区别
你提到的“用Exporting把方法A的参数传给方法B”完全不属于继承,两者是风马牛不相及的概念:
作用场景完全不同
- 参数传递(Importing/Exporting/Changing):是单次方法调用时的临时数据交互,调用结束后,两个方法之间就没有任何数据关联了。
- 继承:是类定义层面的结构复用,子类继承父类的属性、方法,这种关系是长期存在的,和单次方法调用无关。
关系主体不同
- 参数传递是两个方法(或调用方与方法)之间的临时交互,哪怕是完全无关的两个类的方法,只要参数匹配就能传参。
- 继承是子类与父类之间的层级关系,子类必须明确声明继承自某个父类,才能使用父类的非私有成员。
数据归属不同
- 用Exporting传参给B,只是把A里的某个变量值复制或引用传递给B的参数,B并没有“拥有”A的参数,只是临时使用这个值而已。
- 继承是子类直接获得父类的成员所有权,这些成员属于子类本身的一部分,子类的任何方法都能直接使用,不需要每次调用都传参。
举个生活化的例子:
- 参数传递:你点外卖时给商家发地址(Importing),商家给你送外卖(Exporting),交易结束后你们就没关联了。
- 继承:你继承了家里的店铺,这个店铺从此就是你的资产,你随时可以经营,不需要每次开门都跟家人申请拿钥匙。
内容的提问来源于stack exchange,提问作者Whatever M.
相关产品推荐
相关产品推荐

