類用于指定對象的形式,它將數(shù)據(jù)表示和將該數(shù)據(jù)操作為一個整齊包的方法組合。 類中的數(shù)據(jù)和函數(shù)稱為類的成員。
定義類時,可以為數(shù)據(jù)類型定義藍(lán)圖。 這實際上不定義任何數(shù)據(jù),但它定義了類名稱的意義,類的對象將包括什么,以及可以對這樣的對象執(zhí)行什么操作。 也就是說,它定義對象的抽象特性,例如屬性,字段和屬性。
以下語法顯示如何定義類:
CLASS <class_name> DEFINITION. .......... .......... ENDCLASS.
類定義從關(guān)鍵字CLASS開始,后面跟著類名DEFINITION和類主體。 類的定義可以包含類的各種組件,如屬性,方法和事件。 當(dāng)我們在類聲明中聲明一個方法時,方法實現(xiàn)必須包含在類實現(xiàn)中。 以下語法顯示如何實現(xiàn)類:
CLASS <class_name> IMPLEMENTATION. ........... .......... ENDCLASS.
注意 - 類的實現(xiàn)包含其所有方法的實現(xiàn)。 在ABAP對象中,類的結(jié)構(gòu)包含諸如屬性,方法,事件,類型和常量等組件。
屬性是可以具有任何數(shù)據(jù)類型(如C,I,F(xiàn)和N)的類的數(shù)據(jù)字段。它們在類聲明中聲明。 這些屬性可以分為兩類:實例和靜態(tài)屬性。 實例屬性定義對象的實例特定狀態(tài)。 不同對象的狀態(tài)不同。 使用DATA語句聲明實例屬性。
靜態(tài)屬性定義由類的所有實例共享的類的公共狀態(tài)。 也就是說,如果您更改類的一個對象中的靜態(tài)屬性,該更改對該類的所有其他對象也是可見的。 使用CLASS-DATA語句聲明靜態(tài)屬性。
方法是表示類中的對象的行為的函數(shù)或過程。 類的方法可以訪問類的任何屬性。 方法的定義也可以包含參數(shù),以便在調(diào)用方法時可以向這些參數(shù)提供值。 方法的定義在類聲明中聲明,并在類的實現(xiàn)部分實現(xiàn)。 METHOD和ENDMETHOD語句用于定義方法的實現(xiàn)部分。 以下語法顯示如何實現(xiàn)一種方法:
METHOD <m_name>. .......... .......... ENDMETHOD.
在此語法中,< m_name> 表示方法的名稱。 注意 - 您可以使用CALL METHOD語句調(diào)用方法。
類組件可以在控制如何訪問這些組件的公共,私有或受保護(hù)的可見性部分中定義。 私有可見性部分用于拒絕從類外部訪問組件。 這樣的組件只能從類內(nèi)部訪問,例如方法。
在公共可見性部分中定義的組件可以從任何上下文訪問。 默認(rèn)情況下,類的所有成員都是私有的。 實際上,我們在私有節(jié)中定義數(shù)據(jù),在公共節(jié)中定義相關(guān)方法,以便可以從類外面調(diào)用它們,如下面的程序所示。
在類中的Public部分中聲明的屬性和方法可以由該類和程序的任何其他類,子類訪問。
當(dāng)屬性和方法在類的Protected部分中聲明時,那些類和子類(派生類)只能訪問它們。
當(dāng)在類的Private部分中聲明屬性和方法時,這些屬性和方法只能由該類訪問,而不能由任何其他類訪問。
Report ZAccess1. CLASS class1 Definition. PUBLIC Section. Data: text1 Type char25 Value 'Public Data'. Methods meth1. PROTECTED Section. Data: text2 Type char25 Value 'Protected Data'. PRIVATE Section. Data: text3 Type char25 Value 'Private Data'. ENDCLASS. CLASS class1 Implementation. Method meth1. Write: / 'Public Method:', / text1, / text2, / text3. Skip. EndMethod. ENDCLASS. Start-Of-Selection. Data: Objectx Type Ref To class1. Create Object: Objectx. CALL Method: Objectx→meth1. Write: / Objectx→text1.
上面的代碼產(chǎn)生以下輸出:
Public Method: Public Data Protected Data Private Data Public Data
靜態(tài)屬性用語句CLASS-DATA聲明。 所有對象或?qū)嵗伎梢允褂妙惖撵o態(tài)屬性。 靜態(tài)屬性直接在類名的幫助下訪問,像class_name?name_1='Some Text'。
例
下面是一個程序,我們要打印一個文本行4到8次。 我們定義一個類class1,在公共部分我們聲明CLASS-DATA(靜態(tài)屬性)和一個方法。 在實現(xiàn)類和方法之后,我們直接訪問Start-Of-Selection事件中的static屬性。 然后我們只創(chuàng)建類的實例并調(diào)用該方法。
Report ZStatic1. CLASS class1 Definition. PUBLIC Section. CLASS-DATA: name1 Type char45, data1 Type I. Methods: meth1. ENDCLASS. CLASS class1 Implementation. Method meth1. Do 4 Times. data1 = 1 + data1. Write: / data1, name1. EndDo. Skip. EndMethod. ENDCLASS. Start-Of-Selection. class1?name1 = 'ABAP Object Oriented Programming'. class1?data1 = 0. Data: Object1 Type Ref To class1, Object2 Type Ref To class1. Create Object: Object1, Object2. CALL Method: Object1→meth1, Object2→meth1.
上面的代碼產(chǎn)生以下輸出:
構(gòu)造函數(shù)是在創(chuàng)建對象或訪問類的組件時自動調(diào)用的特殊方法。 每當(dāng)一個對象被創(chuàng)建時,構(gòu)造器被觸發(fā),但是我們需要調(diào)用一個方法來觸發(fā)一般方法。 在下面的例子中,我們聲明了兩個公共方法method1和constructor。 這兩種方法都有不同的操作。 在創(chuàng)建類的對象時,構(gòu)造函數(shù)方法觸發(fā)其操作。
Report ZConstructor1. CLASS class1 Definition. PUBLIC Section. Methods: method1, constructor. ENDCLASS. CLASS class1 Implementation. Method method1. Write: / 'This is Method1'. EndMethod. Method constructor. Write: / 'Constructor Triggered'. EndMethod. ENDCLASS. Start-Of-Selection. Data Object1 Type Ref To class1. Create Object Object1.
上面的代碼產(chǎn)生以下輸出:
Constructor Triggered
當(dāng)你在類的public節(jié)中聲明任何類型的變量時,你可以在任何其他實現(xiàn)中使用它。 變量可以在public section中用初始值聲明。 我們可以在一個具有不同值的方法中再次聲明該變量。 當(dāng)我們在方法中寫入變量時,系統(tǒng)將打印更改的值。 要反映變量的先前值,我們必須使用“ME"運(yùn)算符。
在這個程序中,我們聲明了一個公共變量text1,并用一個值初始化。 我們已經(jīng)再次聲明相同的變量,但是用不同的值實例化。 在該方法中,我們使用“ME"運(yùn)算符寫該變量以獲取先前啟動的值。 我們通過直接聲明獲得更改的值。
Report ZMEOperator1. CLASS class1 Definition. PUBLIC Section. Data text1 Type char25 Value 'This is CLASS Attribute'. Methods method1. ENDCLASS. CLASS class1 Implementation. Method method1. Data text1 Type char25 Value 'This is METHOD Attribute'. Write: / ME→text1, / text1. ENDMethod. ENDCLASS. Start-Of-Selection. Data objectx Type Ref To class1. Create Object objectx. CALL Method objectx→method1.
上面的代碼產(chǎn)生以下輸出:
This is CLASS Attribute This is METHOD Attribute
更多建議: