Documentation

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