【转载】ABAP面向对象(Object Orientation)编程2-类的静态属性

对于ABAP OO中的静态属性,使用  class-data语句定义(ClASS-DATA attr(属性)[可选]),语句CLASS-DATA只允许被声明在接口或者类中,这个语句定义一个静态属性attr的有效性是和类的实例无关的,只对类的本身有效。所有的类的实例和子类都可以访问这个静态属性。

注意

1.        像所有的在继承中的静态组件,静态属性存在于所有继承父类的子类中。静态的属性,该属性是可见的外部使用类组件选择器可以解决随着它存在的类中的所有的名字。这意味着类在声明的时候已经被定义,举例来说,如何执行构造函数有影响。如果静态属性改变,那么所有的类都会影响,会独立的寻找地址。

2.        你可以访问CLASS-DATA定义的静态属性只用类的名字,而不是接口的名字。

3.        作为一个普通的类,这是他们内部的程序模式是建立在加载类时,共享内存功能的类的静态属性以同样的方式处理,如果不同的程序访问类中静态属性,那么这些动态属性是相互独立的。

4.        动态属性接口可以声明成一个static box,用语句 BOXED.

下面代码是在类vehicle中定义了一个静态属性claaa_name和一个实例属性speed。

CLASS vehicle DEFINITION.

PUBLIC SECTION.

CLASS-DATA class_name(10) TYPE C VALUE 'vehicle'.

PROTECTED SETION.

DATA speed TYPE I.

ENDCLASS.

完整代码:

ABAP

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

REPORT ztest_oo_static.

*&---------------------------------------------------------------------*

*&       Class cl_vehicle

*&---------------------------------------------------------------------*

*        Text

*----------------------------------------------------------------------*

CLASS cl_vehicle DEFINITION.

  PUBLIC SECTION.

    CLASS-DATA class_name(10) VALUE 'Vehicle'.

    METHODS:accelerate,show_speed.

  PROTECTED SECTION.

    DATA speed TYPE i.

    CONSTANTS: pi TYPE p DECIMALS 2 VALUE '3.14'.

ENDCLASS.               "cl_vehicle

*&---------------------------------------------------------------------*

*&       Class (Implementation)  cl_vehicle

*&---------------------------------------------------------------------*

*        Text

*----------------------------------------------------------------------*

CLASS cl_vehicle IMPLEMENTATION.

  METHOD accelerate.

    speed = speed + 1.

  ENDMETHOD.                    "accelerate

  METHOD show_speed.

    WRITE: / 'Speed:' ,speed.

  ENDMETHOD.                    "show_speed

ENDCLASS.               "cl_vehicle

 

DATA ob_app1 TYPE REF TO cl_vehicle.

DATA ob_app2 TYPE REF TO cl_vehicle.

DATA ob_app3 TYPE REF TO cl_vehicle.

DATA o_vehicle TYPE REF TO cl_vehicle. "引用全局类

 

START-OF-SELECTION.

  CREATE OBJECT ob_app1.

  CREATE OBJECT ob_app2.

 

  WRITE: 'ob_app1',ob_app1->class_name.

  WRITE: / 'ob_app2',ob_app2->class_name.

  WRITE: / 'vehicle',cl_vehicle=>class_name.  "类静态属性

 

  SKIP.

* 更改类静态属性

  ob_app1->class_name = 'Ship'.

  WRITE: / 'ob_app1',ob_app1->class_name.

  WRITE: / 'ob_app2',ob_app2->class_name.

  WRITE: / 'vehicle',cl_vehicle=>class_name.

 

  SKIP.

  cl_vehicle=>class_name = 'Bus'.

  CREATE OBJECT ob_app3.

  WRITE: / 'ob_app3',ob_app3->class_name.

 

  CALL METHOD ob_app3->accelerate.

  CALL METHOD ob_app3->show_speed.

 

  CREATE OBJECT o_vehicle.

 

  DO 5 TIMES.

    CALL METHOD o_vehicle->accelerate.

  ENDDO.

  CALL METHOD o_vehicle->show_speed.

 

  DATA o_vehicle2 LIKE o_vehicle.

 

* 类赋值,对象只要有被引用的变量,就是活动的

  o_vehicle2 = o_vehicle.

 

  CLEAR o_vehicle.

  WRITE: '类赋值,对象只要有被引用的变量,就是活动的'.

  CALL METHOD o_vehicle2->show_speed.

运行结果:

2017-02-25_18-06-23

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值