Behavior of Inherited Built-In Methods
Subclass double
Most built-in functions used with built-in classes are actually methods of the built-in class. For example, the double and single classes define several methods to perform arithmetic operations, indexing, matrix operation, and so on. All these built-in class methods work with subclasses of the built-in class.
Subclassing double enables your class to use features without implementing the methods that a MATLAB® built-in class defines.
The DocSimpleDouble class subclasses the built-in double class.
classdef DocSimpleDouble < double methods function obj = DocSimpleDouble(data) if nargin == 0 data = 0; end obj = obj@double(data); end end end
Create an instance of the class DocSimpleDouble.
sc = DocSimpleDouble(1:10)
sc =
1x10 DocSimpleDouble:
double data:
1 2 3 4 5 6 7 8 9 10Call a method inherited from class double that operates on the data, such as sum. sum returns a double and, therefore, uses the display method of class double:
sum(sc)
ans =
55Index sc like an array of doubles. The returned value is the class of the subclass:
a = sc(2:4)
a =
1x3 DocSimpleDouble:
double data:
2 3 4
Indexed assignment works the same as the built-in class. The returned value is the class of the subclass:
sc(1:5) = 5:-1:1
sc =
1x10 DocSimpleDouble:
double data:
5 4 3 2 1 6 7 8 9 10
Calling a method that modifies the order of the data elements operates on the data, but returns an object of the subclass:
sc = DocSimpleDouble(1:10); sc(1:5) = 5:-1:1; a = sort(sc)
a =
1x10 DocSimpleDouble:
double data:
1 2 3 4 5 6 7 8 9 10
Built-In Data Value Methods
When you call a built-in data value method on a subclass object, MATLAB uses the superclass part of the subclass object as inputs to the method. The value returned is same class as the built-in class. For example:
sc = DocSimpleDouble(1:10); a = sin(sc); class(a)
ans = double
Built-In Data Organization Methods
This group of built-in methods reorders or reshapes the input argument array. These methods operate on the superclass part of the subclass object, but return an object of the same type as the subclass.
sc = DocSimpleDouble(randi(9,1,10))
sc = DocSimpleDouble(randi(9,1,10))
sc =
1x10 DocSimpleDouble:
double data:
6 1 8 9 7 7 7 4 6 2b = sort(sc)
b =
1x10 DocSimpleDouble:
double data:
1 2 4 6 6 7 7 7 8 9Methods in this group include:
Built-In Indexing Methods
When you use indexing to reference into an object that inherits from a built-in
class, only the built-in data is referenced, not the properties defined by your
subclass. You cannot make indexed references if your subclass defines properties,
unless your subclass overrides the default subsref method.
For example, indexing element 2 in the
DocSimpleDouble subclass object returns the second element in
the vector.
sc = DocSimpleDouble(1:10); a = sc(2)
a =
DocSimpleDouble
double data:
2
The value returned from an indexing operation is an object of the subclass.
Assigning a new value to the second element in the
DocSimpleDouble object operates only on the superclass
data.
sc(2) = 12
sc =
1x10 DocSimpleDouble:
double data:
1 12 3 4 5 6 7 8 9 10
The subsref method also implements dot notation for methods.
Built-In Concatenation Methods
Built-in classes use the functions horzcat, vertcat, and cat to implement concatenation. When you use these functions with subclass objects of the same type, MATLAB concatenates the superclass data to form a new object. For example, you can concatenate objects of the DocSimpleDouble class:
sc1 = DocSimpleDouble(1:10); sc2 = DocSimpleDouble(11:20); [sc1,sc2]
ans =
1x20 DocSimpleDouble:
double data:
Columns 1 through 13
1 2 3 4 5 6 7 8 9 10 11 12 13
Columns 14 through 20
14 15 16 17 18 19 20
[sc1;sc2]
ans =
2x10 DocSimpleDouble:
double data:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
Concatenate two objects along a third dimension:
c = cat(3,sc1,sc2)
c =
1x10x2 DocSimpleDouble:
double data:
(:,:,1) =
1 2 3 4 5 6 7 8 9 10
(:,:,2) =
11 12 13 14 15 16 17 18 19 20If the subclass of a built-in class defines properties, you cannot concatenate objects of the subclass. There is no way to determine how to combine properties of different objects. However, your subclass can define custom horzcat and vertcat methods to support concatenation in whatever way makes sense for your subclass.