The following solution stems from several workarounds/hacks and is not part of the standard MATLAB's OO constructs. Use with caution.
You need to:
- evalin()into the- 'caller'workspace the names and classes of the- 'base'workpsace variables
- retrieve the last executed command
- extract the name of the assigned variable with e.g. regexp()
- compare names and classes. If a total match occurs, i.e. the variable in the 'base'workspace is being overwritten with a new instance of the same class, ask the user forinput(). If the user chooses to preserve the existing object, overwrite the new instance with the existing one throughevalin('caller',...).
The class foo:
classdef foo < handle
    properties
        check = true;
    end
    methods
        function obj = foo()
            % variable names and sizes from base workspace
            ws = evalin('base','whos');
            % Last executed command from window
            fid = fopen([prefdir,'\history.m'],'rt');
            while ~feof(fid)
                lastline = fgetl(fid);
            end
            fclose(fid);
            % Compare names and classes
            outname = regexp(lastline,'\<[a-zA-Z]\w*(?=.*?=)','match','once');
            if isempty(outname);  outname = 'ans'; end
            % Check if variables in the workspace have same name
            idx = strcmp({ws.name}, outname);
            % Ask questions
            if any(idx) && strcmp(ws(idx).class, 'foo')
                s = input(sprintf(['''%s'' already exists. '...
                     'Replace it with default? (y/n): '],outname),'s');
                % Overwrite new instance with existing one to preserve it
                if strcmpi(s,'n')
                    obj = evalin('caller',outname);
                end
            end
        end
    end
end
Class in action:
% create class and change a property from default (true) to false
clear b
b = foo
b = 
  foo with properties:
    check: 1
b.check = false
b = 
  foo with properties:
    check: 0
% Avoid overwriting
b = foo
'b' already exists. Replace it with default? (y/n): n
b
b = 
  foo with properties:
    check: 0
The weaknesses (see points above):
- applies only to cmw line and script executed commands, not functions (see link to extend to function calls). Also, might break in case of problems reading history.m.
- the current regex fails on a==b.
- Dangerous because the evalin()on user input leaves potential security threats open. Even if the input is filtered with the regexp and the string comparison, the construct might pose a problem if the code is revisited later on.