SAP-ABAP开发学习-面向对象OOALV(1)-CSDN博客
本文目录
一、类的继承
多态性类继承的实现
二、抽象类
三、最终类
四、接口
五、定义全局对象
一、类的继承
继承的本质是代码重用。当我们要构造一个新类时,无需从零开始,可以参考一个已有的类,即基类或父类,在其基础上简历一个新类,这个新建立的类称为派生类或子类。派生类可以继承基类所有的属性和方法,这样不仅提高了开发效率,还可以在此基础上添加新的特性,以满足更丰富的需求。
声明语句:CLASS <subclass>DEFINITION INHERITING FROM <superclass> .
多态性类继承的实现
由于每个派生类的属性不同,相同的基类对象在不同的派生类中需要以不同的方式来表现,因此提供多态的概念。 在派生类中定义和基类相同的接口,但是可以使用不同的代码来实现。
声明语句: METHOD <meth> REDEFINITION .
在派生类中使用基类的方法,使用SUPER:CALL METHOD SUPER-><meth>.
重载方法,使用ME:CALL METHOD ME-><meth>.
二、抽象类
含有一个或多个方法的类,如果这些方法仅包含方法定义而没有具体实现,那么这样的类被称为抽象类。抽象类不能使用CREATE OBJECT语句来创建实例对象,因为它们仅包含没有具体实现的方法。在定义抽象类时,我们会使用如下语法:CLASS DEFINITION ABSTRACT . / ENDCLASS .
没有具体实现的方法被称为抽象方法,它们仅包含方法定义,而没有具体的代码实现,因此需要通过派生类来实现这些抽象方法。在定义抽象方法时,使用METHODS ABSTRACT来声明。
三、最终类
最终类和最终方法都是不可继承的,它们在设计中起到了防止多级别派生可能造成的语法和语义冲突的作用。
声明语句:CLASS <class> DEFINITION FINAL . / ENDCLASS .
声明一个最终方法:METHODS <meth> FINAL .
确保了该方法在派生类中不会被重写,从而保持了其在整个继承体系中的唯一性和稳定性。
四、接口
接口(INTERFACE)与抽象类相似,它定义了一些未实现的属性和方法。所有继承这个接口的类都将继承这些成员,但与抽象类不同的是,接口不需要提供方法的实现,并且不能直接实例化。接口的所有成员都是抽象的,这意味着它们只包含声明而不包含具体的实现代码。接口成员一般是公有的,以便于任何继承该接口的类都能够访问这些成员。此外,接口中不能含有构造方法,这是因为接口本身不用于创建对象实例,而是作为其他类实现特定功能的标准或协议。
声明语句:INTERFACE <intf> .
DATA …
METHOD ...
ENDINTERFACE .
CLASS <class> DEFINITION .
PUBLIC SECTION .
INTERFACE: int1, int2 .
ENDCLASS.
静态成员访问时,通过接口引用访问 intf=>const ; 其他成员,可以通过实现该接口的类本身或者类引用进行访问: class=>intf~attr. CALL METHOD class=>intf~meth .
直接调用接口方法,必须使用循环 或者使用别名:ALIASES alias FOR intf~com1 .
五、定义全局对象
事务代码SE24: CL_GUI_ALV_GRID
或者 在Object Navigator(SE80)中左侧的导航区域,在右键弹出的上下文菜单上选择“Create->Class Library->Class” 在弹出的窗口中输入类名,在下个输入域输入该类的简短描述,在“Instantiation”输入域选择“Public”,并且选择“Final”复选框。
说明
①Instantiation类的实例类型: PUBLIC表示该类的对象实例可以被所有用户创建、PROTECTED表示该类的对象实例只能被其本身或派生类创建,Private表示该类的对象实例只能通过其自身方法创建(Private)。
②Final 最终类: 如果选择了该项,则全局类不能被其它类所继承。
③Only modeled模型类: 用于说明该类只有图形化模型,而没有具体实现部分。