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.
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.
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
.