在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來修改父類中的方法,但是沒有改線父類中的結構。