I am trying to check if a parameter is of a certain type when instantiating a subclass of a superclass, and I keep getting an error that appears to be associated with my method of checking of the argument type. The debugger won't even let me include a breakpoint without throwing the error "A constructor call to superclass appears after the object is used, or after a return." I think it's pretty obvious what line of code breaks my classes, but why am I not allowed to do this type checking? What other ways are there to confirm that my arguments are of a particular type? Code below.
classdef superClass < handle properties PropertyOne PropertyTwo end methods function sup = superClass(param1, param2) sup.PropertyOne = param1; sup.PropertyTwo = param2; end endendclassdef subClass < superClass properties PropertyThree end methods function sub = subClass(param1, param2, param3) if ~isa(param1, 'char') disp('param1 must be type char') return end sub@superClass(param1, param2); sub.PropertyThree = param3; end endend
Best Answer
Call error instead of disp and return. The constructor must return a valid object in sub when return is called and your code has not initialized it yet.