ABAP OO INHERITANCE & POLYMORPHISM

ABAP OO不支持multiple inheritance只支持single inheritance

Inheritance是单向的,即子类知道自己的父类,但父类却不知道自己的子类。

ABAP OO不支持方法重载,所以重新override父类的方法时不需要指定参数,不过constructor除外。

父类中的constructor在子类中必须被定义。对于静态constructor则没有必要,runtime system会在子类的静态constructor调用之前调用其所有父类的constructor

如果子类中没有constructor那么其上层最近的的父类的constructor的参数在创建对象时必须被传入。

ABAP类定义中必须得遵循下面的顺序:public protected private

只能redefine(publicprotected)instance method,其他component不能被redefine

一个类的publicprotected的静态属性与其所有子类共享。并不是子类中的静态属性拷贝于父类的静态属性。

父类中可以访问到的东西在子类中都可以得到。

通过继承可以实现多态,实现的方式是在子类中重新定义父类中的方法。

多态是继承的一个主要用途,不同的类的实例可以通过同一个方法调用,而具体使用哪个方法系统会自动查找到适当的。

有了多态你就可以在更高的层次编写代码了,比如如果出现了新的用户场景,你只需要定义一个新的子类然后重新定义父类方法就可以了。

一个reference variable天生带有两种属性:静态的和动态的。静态的是指通过TYPE REF TO定义的他决定了那些方法和属性可以被调用。动态是指实例赋给指针变量时决定的,实例本身的类型决定哪个具体的重新定义的方法被调用。

Widening cast不能被静态检查所以必须使用cast operator ?=

可以使用RTTI来避免cast runtime error

不要简单只是为了复用代码而使用继承

不要因为只是属性的不同而使用继承,例如car下面有两个子类red carblue car。由于实例不能动态的改变其所属的类所以对于下面的情形不应当使用继承而应当使用role design pattern。如员工有全职员工和兼职员工两种类型,而兼职员工可以转换为全职员工。继承的概念有时候与现实情况不符,比如正方形在现实中是长方形的一个实例,然而如果将其作为长方形的子类,那么长方形有两个方法改变长度和改变宽度。而正方形实际只应有一个方法即改变边长。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值