ABAP OO不支持multiple inheritance只支持single inheritance。
Inheritance是单向的,即子类知道自己的父类,但父类却不知道自己的子类。
ABAP OO不支持方法重载,所以重新override父类的方法时不需要指定参数,不过constructor除外。
父类中的constructor在子类中必须被定义。对于静态constructor则没有必要,runtime system会在子类的静态constructor调用之前调用其所有父类的constructor。
如果子类中没有constructor那么其上层最近的的父类的constructor的参数在创建对象时必须被传入。
在ABAP类定义中必须得遵循下面的顺序:public protected private。
只能redefine(public或protected)instance method,其他component不能被redefine。
一个类的public或protected的静态属性与其所有子类共享。并不是子类中的静态属性拷贝于父类的静态属性。
父类中可以访问到的东西在子类中都可以得到。
通过继承可以实现多态,实现的方式是在子类中重新定义父类中的方法。
多态是继承的一个主要用途,不同的类的实例可以通过同一个方法调用,而具体使用哪个方法系统会自动查找到适当的。
有了多态你就可以在更高的层次编写代码了,比如如果出现了新的用户场景,你只需要定义一个新的子类然后重新定义父类方法就可以了。
一个reference variable天生带有两种属性:静态的和动态的。静态的是指通过TYPE REF TO定义的他决定了那些方法和属性可以被调用。动态是指实例赋给指针变量时决定的,实例本身的类型决定哪个具体的重新定义的方法被调用。
Widening cast不能被静态检查所以必须使用cast operator ?=
可以使用RTTI来避免cast runtime error
不要简单只是为了复用代码而使用继承
不要因为只是属性的不同而使用继承,例如car下面有两个子类red car和blue car。由于实例不能动态的改变其所属的类所以对于下面的情形不应当使用继承而应当使用role design pattern。如员工有全职员工和兼职员工两种类型,而兼职员工可以转换为全职员工。继承的概念有时候与现实情况不符,比如正方形在现实中是长方形的一个实例,然而如果将其作为长方形的子类,那么长方形有两个方法改变长度和改变宽度。而正方形实际只应有一个方法即改变边长。