Object Precedence in Method Invocation

Object Precedence

Establishing an object precedence enables MATLAB® to determine which of possibly many versions of an operator or function to call in a given situation.

For example, consider the expression

objectA + objectB

Ordinarily, objects have equal precedence and the method associated with the leftmost object is called. However, there are two exceptions:

  • Classes defined with the classdef syntax have precedence over these MATLAB classes:

    double, single, int64, uint64, int32, uint32, int16, uint16, int8, uint8, char, string, logical, cell, struct, and function_handle.

  • Classes defined with the classdef syntax can specify their relative precedence with respect to other classes using the InferiorClasses attribute.

Consider the example in Representing Polynomials with Classes. The DocPolynom class defines a plus method that enables the addition of DocPolynom objects. Given the object p:

p = DocPolynom([1 0 -2 -5])
p =
    x^3-2*x-5

the expression:

1 + p
ans =
    x^3-2*x-4

calls the DocPolynom plus method (which converts the double, 1, to a DocPolynom object and then implements the addition of two polynomials). The DocPolynom class has precedence over the built-in double class.

Defining Precedence

You can specify the relative precedence of classes defined with the classdef syntax by listing inferior classes in a class attribute. The InferiorClasses property places a class below other classes in the precedence hierarchy. Define the InferiorClasses property in the classdef statement:

classdef (InferiorClasses = {?class1,?class2}) myClass

This attribute establishes a relative priority of the class being defined with the order of the classes listed.

Location in the Hierarchy

If objectA is above objectB in the precedence hierarchy, then the expression

objectA + objectB

calls @classA/plus.m. Conversely, if objectB is above objectA in the precedence hierarchy, then MATLAB calls @classB/plus.m.

Related Topics