FavoriteLoading
0

ABAP面向对象(Object Orientation)编程4-类的构造方法(constructor method)

[隐藏]

构造函数就是CREATE OBJECT的时候会自动调用的方法(method).分为静态和非静态两种。

1,静态构造方法

语法:

静态的构造函数是每个类都已具有的方法,但我们可以通过重定义来完成某些初始化工作

静态的构造器只在程序中被调用一次,即第一次作用该类调用时,且不能被程序显示地调用

该方法也必须在公共部分采用CLASS-METHODS声明,其名称必须是class_constructor,且没有参数(因为不能被显示的调用)

并且在此方法里只能访问类的静态属性

运行后:

2017-03-02_11-01-34

2,非静态构造方法

语法:

构造函数的名是固定的,即为constructor

构造方法默认就是FINAL的,所以没有必要加

构造器必须放在Public段中进行声明

构造方法中不能包含任何形式的输出参数返回值

如果在对象创建并调用构造方法的过程中出现异常,则该对象将被删除

构造函数没有输出参数,只有输入参数,且无返回值

每个类都会有一个默认的无参构造器,但如果重新定义了构造器,则会覆盖默认构造器

在类的创建过程中,有两个特殊的方法,一个是实例的构造函数constructor,该方法在实例创建时隐式的调用;另一个方法是类构造函数class_constructor(静态构造方法),该方法在第一次访问类时被调用,且只调用一次。

如果某个类继承了别的类(Object除外),这个某个类又重新定义了构造器,则一定要在构造器中明确使用super->constructor方法来调用一下父类构造器(否则编辑不通过),只有这样才能保证整个对象被完整地构造出来,因为子类只能正确地构造出属于自己的那部分属性,对于从基类继承来的那部分属性要调用基类中的构造方法来完成。在调用父构造器前,只能访问父类中静态的组件,只有在调用了父类构造器后,才能去访问父中的实例组件。

如果在一个子类里重写了默认构造函数constructor,则在实现时一定要明确的使用CALL METHOD super->constructor.调用一下父类的构造函数,但不一定是在第一句进行调用。

151957144015630

如果某个类重写了父类某个方法,则在父类构造器中如果调用该方法,调用到的方法还是父类的方法,而不是被重写后的子类方法。

2017-03-02_11-20-05

另外,不能在构造器中调用抽象方法,所以要想在父类的方法中回调到时子类重定义方法,该被重写的方法一定要是父类中定义的抽象方法,这与设计模式中的模板方法设计模式是相当的,以下是使用ABAP面向对象来实现模板方法设计模式:

3,简单的例子代码

运行结果:

2017-03-02_11-22-47

以上。