天天看點

OO對象中up-casting和Down-casting

在ABAP OO對象中,會經常提到UP-CASTING和Down-casting.那麼這究竟是什麼呢?

UP-CASTING: 向上繼承

Down-casting:向下繼承,也就是強制性向下指派類型;

比如:

我們在系統裡定義了一個Superclass: LCL_SUPERCLASS,它一個子類LCL_SUBCLASS并且CL_SUBCLASS繼承了LCL_SUPERCLASS.

子類的繼承是通過INHERTING FROM來實作的。

Data: lo_superclass type ref to LCL_SUPERCLASS,

        lo_subclass  TYPE REF TO LCL_SUBCLASS,

        lo_subclass01  LIKE lo_subclass.

CREATE OBJECT lo_subclass.

lo_superclass = lo_subclass. “這就是up-casting ,也就是widen casting,那麼将子類的reference指派給superclass的reference,那麼superclass的就可能擷取到更多的component,因為包括一部分subclass裡的元件;

使用UP-casting,這樣就确定雙方的component基本上保持一緻,包括名字群組件。

up-casting隻能使用SUPERCLASS中重定義的元件和繼承的元件。

lo_subclass01 ?= lo_superclass.  ”這就是down-casting,也就是narrow casting,因為lo_superclass指派給lo_subclass01,無法确定sub_class01的類型,必須使用 "?="來強制類型轉換,否則會出現message.

down-casting可以使用SUPERCLASS中重定義的元件和繼承的元件,以及subclass中新增的元件。

其實這些都是由類的繼承關系可以解釋的。在OO裡,類的繼承是單向的,也就是子類繼承父類,父類卻不知道它的子類是哪一個。當子類繼承父類之後,它就具有父類的所有屬性,也可以通路父類裡的所有元件(PUBLICK和protect, Private除外)。

 子類繼承父類之後,可以通過redefinition來修改父類中的方法,但是沒有改線父類中的結構。

繼續閱讀