This is the syntax to define an object reference variable:

Syntax
DEFINE [access-mode ] VARIABLE object-reference
  AS [ CLASS ]object-type-name[ EXTENT constant ][ NO-UNDO ] .

This is the syntax to define an object reference property:

DEFINE [access-mode ] PROPERTY object-reference
  AS [ CLASS ]object-type-name[ EXTENT constant ][ NO-UNDO ]
  accessor-definitions .

Element descriptions for this syntax diagram follow:

Note: For more information on each option, see the specified references in this book and also the DEFINE VARIABLE and DEFINE PROPERTY statement reference entries in ABL Reference. For variables, no other options apply, because they are not supported for object references.
access-mode
The optional access mode specifies where and how the variable or property can be accessed, and the available options depend on where the variable is defined (as a class data member or property, within a procedure, etc.). For more information on accessing class data members and properties, see Access data members and properties.
object-reference
The name of a variable or property that will hold an object reference value.
CLASS
The CLASS keyword is required if object-type-name conflicts with an abbreviation for a built in ABL data type, such as INTE (INTEGER). Otherwise, it can optionally be used to clarify the readability of the statement.
object-type-name
The type name of a class or interface. This can be the fully qualified object type name or the unqualified class or interface name, depending on the presence of an appropriate USING statement in the class or procedure file. For more information on object type names, see Define and reference object type names. For more information on the USING statement, see Reference an object type name without its package.
EXTENT constant
An object type name defined with an extent is an array of object references to that type. In other words, each element of the array can contain an object reference to an instance of the specified type. If constant is zero, then the object reference is not an array.
NO-UNDO
If specified, prevents the variable or property value from being undone if a transaction that changes it is rolled back.
accessor-definitions
One or two property accessors that indicate if the property is readable, writable, or both.

For more information on defining:

The following example shows a fragment of the Main class from the sample classes that are fully implemented in Sample classes. This fragment defines several private variables to hold object references and filenames:

USING acme.myObjs.*.
USING acme.myObjs.Common.*.
USING acme.myObjs.Interfaces.*.

CLASS Main:
  DEFINE PRIVATE VARIABLE cOutFile     AS CHARACTER         NO-UNDO.
  DEFINE PRIVATE VARIABLE rCommonObj   AS CLASS CommonObj   NO-UNDO.
  DEFINE PRIVATE VARIABLE rCustObj     AS CLASS CustObj     NO-UNDO.
  DEFINE PRIVATE VARIABLE rCustObj2    AS CLASS CustObj     NO-UNDO.
  DEFINE PRIVATE VARIABLE rHelperClass AS CLASS HelperClass NO-UNDO.
  DEFINE PRIVATE VARIABLE rIBusObj     AS CLASS IBusObj     NO-UNDO.

  CONSTRUCTOR PUBLIC Main ( ):
    ASSIGN
      /* Create an instance of the HelperClass class */
      rHelperClass = NEW HelperClass ( )

      /* Create an instance of the CustObj class */
      rCustObj     = NEW CustObj ( )
      cOutFile      = "Customers.out".

    /* Subscribe OutputGenerated event handler for CustObj */
    rCustObj:OutputGenerated:Subscribe(OutputGenerated_CustObjHandler).
  END CONSTRUCTOR.
  ...
END CLASS.