BC401 - 考试陷阱
考试陷阱 (Exam Traps)
#dashboard #exam-traps
⚠️本笔记的目的
考试中容易出错或混淆的重点陷阱集合。
OO编程模型
⛔Trap: 函数组可以实现封装但无法实现多实例
- 函数组虽然可以封装数据,但一个程序中一个函数组只有一个实例
- 只有OO编程才能通过类创建多个独立对象实例
- OO编程模型
UML建模
⛔Trap: 聚合(Aggregation)与组合(Composition)的区别
- 聚合: 部分可以独立于整体存在(空心菱形)
- 组合: 部分不能独立于整体存在(实心菱形),生命周期绑定
- UML类图
类与对象
⛔Trap: READ-ONLY 只能在 PUBLIC SECTION 中使用
READ-ONLY附加项只能在公有可见性部分声明- 外部可以读取但不能修改,只有类内部方法可以修改
- 类属性与方法
⛔Trap: LIKE 在类中只能用于本地数据对象或SY字段
- 在类的
DATA语句中,只能使用TYPE引用数据类型 LIKE仅允许用于本地数据对象或SY-DATE,SY-UNAME等SY字段- 类属性与方法
⛔Trap: CLASS 语句不能嵌套
- 不能在一个类内部定义另一个类
- 但可以定义局部辅助类(在全局类中)
- 类属性与方法
继承
⛔Trap: 构造器不被继承
- 子类必须自己定义构造器(如果需要)
- 如果子类定义了构造器,必须调用
super->constructor( ) - 如果子类没有定义构造器,则使用父类的构造器
- 继承基础
⛔Trap: 方法的重定义 ≠ 重载
- ABAP Objects 不支持重载(Overloading) — 不能有多个同名不同参的方法
- 重定义(Redefinition) 是改变继承方法的实现,不改签名
- 重定义只能在 PUBLIC 或 PROTECTED SECTION 中进行
- 继承基础
⛔Trap: PROTECTED SECTION 的语法顺序
- 定义局部类时,必须遵循: PUBLIC SECTION → PROTECTED SECTION → PRIVATE SECTION
- 顺序不能颠倒
- 继承基础
类型转换
⛔Trap: Up-cast vs Down-cast 的命名
- Up-cast (Widening Cast): 子类→父类,
=赋值,隐式安全 - Down-cast (Narrowing Cast): 父类→子类,
?=赋值,可能运行时错误 - 名称容易混淆:up-cast 视角变窄但类型兼容性变宽
- 类型转换与多态
⛔Trap: Down-cast 何时会失败
- 当引用变量实际指向的对象不是目标类(或其子类)的实例时
- 会触发
CX_SY_MOVE_CAST_ERROR运行时异常 - 类型转换与多态
接口
⛔Trap: 接口组件的可见性
- 接口中的所有组件都是公有的 — 接口没有可见性分区
- 但在实现类中,接口组件通过
~操作符访问 - 别名(ALIASES)受类的可见性规则约束
- 接口定义与实现
⛔Trap: 接口不能被实例化
CREATE OBJECT ref TYPE intf是不可能的- 只能通过实现了接口的类的实例进行 up-cast
- 接口多态
事件
⛔Trap: 事件处理器的调用顺序不确定
- 如果多个方法注册到同一事件,调用顺序不保证
- 不能依赖处理器的执行顺序
- ABAP事件
⛔Trap: 事件参数只能通过值传递
- 事件的 EXPORTING 参数必须
VALUE(...)传递 - 处理器中用 IMPORTING 接收
- SENDER 是预定义的隐式参数
- ABAP事件
⛔Trap: 注册和取消注册
SET HANDLER ... ACTIVATION 'X'= 注册(默认)SET HANDLER ... ACTIVATION ' '= 取消注册FOR ALL INSTANCES是唯一能注册尚未创建的对象的方式- ABAP事件
异常处理
⛔Trap: 三种异常类的区别
CX_STATIC_CHECK: 必须在方法签名中声明或在TRY中处理(默认推荐)CX_DYNAMIC_CHECK: 运行时检查,不需要显式声明CX_NO_CHECK: 完全不检查,总是可以传播- 不能直接继承
CX_ROOT,必须从三个子类之一继承 - 异常处理概念
⛔Trap: TRY 块中的异常搜索顺序
- 从最内层 TRY 块开始搜索 CATCH
- 按 CATCH 语句的出现顺序检查
- 如果找到匹配(异常类本身或其父类),跳转到该处理器
- 找不到则向外层扩展搜索
- 异常处理概念
⛔Trap: CLEANUP 块的执行时机
- CLEANUP 只在异常被外层或调用者捕获时执行
- 如果异常在当前 TRY 块内被捕获,CLEANUP 不执行
- 异常处理概念
RTTS
⛔Trap: RTTI 获取的描述对象需要 Down-cast
DESCRIBE_BY_DATA返回的是CL_ABAP_TYPEDESCR类型引用- 需要用
?=(down-cast) 转换为具体子类如CL_ABAP_STRUCTDESCR - 运行时类型服务
Related
- [[_posts/SAP_ABAP/BC401_ABAP对象/00-仪表板/学习地图]] → 薄弱领域
- [[_posts/SAP_ABAP/BC401_ABAP对象/00-仪表板/快速参考]]