Define Class Methods and Functions

The Methods Block

Define methods as MATLAB® functions within a methods block, inside the classdef block. The constructor method has the same name as the class and returns an initialized object of the class. To create an object with property values that are unique to that instance, assign values to properties in the class constructor. Terminate all method functions with an end statement.

classdef ClassName
   properties
      PropertyName
   end
   methods
      function obj = ClassName(arg1,...)
         obj.PropertyName = arg1;
         ...
      end
      function ordinaryMethod(obj,arg1,...)
         ...
      end
   end
   methods (Static)
      function staticMethod(arg1,...)
         ...
      end
   end
end

Method Calling Syntax

MATLAB differs from languages like C++ and Java® in that there is no special hidden class object passed to all methods. You must pass an object of the class explicitly to the method. The leftmost argument does not need to be the class object, and the argument list can have multiple objects. MATLAB dispatches to the method defined by the class of the dominant argument. For more information, see Method Invocation.

Methods must be on the MATLAB path when called. For example, if you create an object and then change your current folder to a folder from which the method file is not visible, an error occurs when you call that method.

Always use case-sensitive method names in your MATLAB code.

Ordinary Methods

Call ordinary methods using MATLAB function syntax or dot notation. For example, suppose that you have a class that defines ordinaryMethod. Pass an object of the defining class and whatever arguments are required.

classdef MyClass
   methods
      function out = ordinaryMethod(obj,arg1)
      ...
      end
   end
end

Call ordinaryMethod using the object obj of the class and either syntax:

obj = MyClass;
r = ordinaryMethod(obj,arg1);
r = obj.ordinaryMethod(arg1);

Static Methods

Static methods do not require an object of the class. To call a static method, prefix the method name with the class name so that MATLAB can determine what class defines the method.

classdef MyClass
   methods (Static)
      function out = staticMethod(arg1)
      ...
      end
   end
end

Call staticMethod using the syntax classname.methodname:

r = MyClass.staticMethod(arg1);

See Static Methods for information on methods that do not require objects of their class.

Private Methods

Use the Access method attribute to create a private method. You do not need to use a private folder.

See Method Attributes for a list of method attributes.

More Detailed Information on Methods

Methods

Class-Related Functions

You can define functions that are not class methods in the file that contains the class definition (classdef). Define local functions outside of the classdef - end block, but in the same file as the class definition. Functions defined in classdef files work like local functions. You can call these functions from anywhere in the same file, but they are not visible outside of the file in which you define them.

Local functions in classdef files are useful for utility functions that you use only within that file. These functions can take or return arguments that are instances of the class but, it is not necessary, as in the case of ordinary methods. For example, the following code defines myUtilityFcn outside the classdef block:

classdef MyClass
   properties
      PropName
   end
   methods
      function obj = MyClass(arg1)
         obj.PropName = arg1;
      end 
   end 
end % End of classdef

function myUtilityFcn
   ...
end

You also can create package functions, which require the use of the package name when calling these functions.

How to Overload Functions and Operators

Overload MATLAB functions for your class by defining a class method with the same name as the function that you want to overload. MATLAB dispatches to the class method when the function is called with an instance of the class.

You can overload MATLAB arithmetic, logical, relational, and indexing operators by defining class methods with the appropriate names.

See the handle class for a list of operations defined for that class. All classes deriving from handle inherit these methods.

Rules for Defining Methods in Separate Files

The following rules apply to methods defined in separate files:

  • To specify attributes for a method defined in a separate file, declare this method in a methods block in the classdef file. Specify the attribute values with the methods block.

  • Match the syntax declared in the methods block (if used) to the method's function line.

  • The separate file must be in the class (@) folder.

  • The class constructor method must be defined in the classdef file. The constructor cannot be in a separate file.

  • Handle class delete methods must be defined in the classdef file. The delete method cannot be in a separate file.

    All functions that use dots in their names must be defined in the classdef file, including:

    • Converter methods that must use the package name as part of the class name because the class is contained in packages

    • Property set and get access methods

For more information on defining methods in separate files, see Methods in Separate Files

Related Topics