全局class和interface的方法可以被单独传送。
Abstract class不能被instantiate,其方法不能被implement,而必须在subclass中redefine。Abstract class的指针可以指向其subclass。可以在create object中指明创建那个子类的实例。
Abstract method的可以看作是其子类的特殊的interface。其必须在子类中redefine。具有一个以上的abstract method的类本身也是abstract。Constructor和static method不能被abstract。
Final class不能被继承,其方法自然也是final。Final method不能被sub class redefinition。Method不能既是final又是abstract。而类可以,这种情况表明这种类只有abstract部分可以被使用。
通过CREATE PUBLIC,CREATE PROTECTED和CREATE PRIVATE可以控制class可以被实例化的范围。利用CREATE PRIVATE和FINAL 可以实现singletom concept。通过class的static来创建实例然后通过class的public static component来指向这个实例,这样外部就可以访问这个实例了。
CLASS的friends可以访问的类的任何component,并可以在任何情况下创建类的实例,不管是使用了create public,create protected还是create private。Friendship是单向的。Friendship的继承:class的friend的子类全部都是该类的friend,而class的子类则不是class的friend的friend。
Persistent service用来实现OO的方式操作数据库中的数据。
理论上ABAP程序是和internal session中的数据和对象一块工作的,程序执行完毕这些数据和对象也就消失了,当需要把数据永久存储时就需要数据库操作了。ABAP OO数据库操作是通过OPEN SQL来实现的。为了永久保存ABAP OBJECT就引入了persistend service 的概念。R/3 basis release 610以后的版本就可以把ABAPOBJECT和他的属性存入到数据库并重新导入了。
Persistent class的objects是通过persistent service来管理的,它不需要语句CREATE OBJECT来实例化,而是用persistent service的方法来初始化的,在创建persistent class时同时会创建一个相应的类,称为class actor或agent,用来管理persistent class的对象。Persistent class必须有类似unique key的key attributes,persistent service用来保证不同persistent class objects内容的唯一性。
对于每一个persistent class,在class builder创建时cl_persistent都会创建另外两个类ca_persistent和cg_persistent。Ca_class成为class actor,用来管理cl_persistent的对象,并在这里进行数据库访问。这个类继承于abstract super class cb_persistent。Ca_persistent可以扩展cb_persistent并重新定义它的方法。Ca_persistent是cl_persistent的friend,并具有属性CREATE PRIVATE,该类在第一次被访问时差生唯一的实例。Ca_persistent有一个静态reference属性AGENT,当使用这个属性时,ca_persistent的静态构造方法便会创建这个类的一个实例并将其赋给AGENT。这个实例是persistent service的一部分用来管理cl_persistent的对象。一个程序中只能产生一个ca_persistent的实例。