关于构造函数注意的是:
1. CREATE OBJECT 的时候会自动调用构造函数
2.父类自定义了构造函数后,子类必须在其构造函数里面调用父类的构造函数 call METHOD super->constructor,并且是在子类构造函数里的第一条语句。这样做是为了能确保对象正确的被实例化。可以这样理解,子类时继承父类的,所以先得构造出父类,子类才知道继承的是个什么东东。另外一方面,子类可以直接使用父类的public的变量和方法,所以得先调用父类构造方法初始化父类的数据。
3.构造函数可以有多个,参数列表不一样就行。参考重载
4.静态构造函数,不用在子类构造函数中调用。系统会自动调用。并且会先调用静态构造函数
REPORT ZYHYCAST.
CLASS lcl_airplane DEFINITION.
PUBLIC SECTION.
DATA: p TYPE i.
METHODS:
get_name EXPORTING name1 TYPE string,
constructor. "构造函数(无参) 也可以
PRIVATE SECTION.
DATA: name TYPE string,
fuel TYPE n LENGTH 10.
ENDCLASS.
CLASS lcl_airplane IMPLEMENTATION.
METHOD constructor.
name = 'lcl_airplane'.
write:/ 'call lcl_airplane constructor'.
ENDMETHOD.
METHOD get_name.
name1 = name.
ENDMETHOD.
ENDCLASS.
CLASS lcl_cargo_airplane DEFINITION INHERITING FROM lcl_airplane.
PUBLIC SECTION.
METHODS: constructor,
get_cargo EXPORTING cargo_name TYPE string.
PRIVATE SECTION.
DATA: cargo TYPE string.
ENDCLASS.
CLASS lcl_cargo_airplane IMPLEMENTATION .
METHOD constructor.
call METHOD super->constructor."必须调用父类构造函数(如果父类有)
cargo = 'cargo_airplane'.
"p = 1. "正确,可以直接访问父类的公有变量
"fuel = '1'. "错误 不能直接访问父类的私有变量
WRITE: /'call lcl_cargo_airplane construtor : cargo=', cargo.
ENDMETHOD.
METHOD get_cargo .
cargo_name = cargo.
ENDMETHOD.
ENDCLASS.
DATA: airplane TYPE REF TO lcl_airplane,
cargo_airplane TYPE REF TO lcl_cargo_airplane.
DATA: temp TYPE string.
START-OF-SELECTION.
CREATE OBJECT airplane.
CREATE OBJECT cargo_airplane.