How to change the default Value of superclass property in subclass

14 ビュー (過去 30 日間)
Nicholas Dinsmore
Nicholas Dinsmore 2012 年 10 月 3 日
回答済み: Philip M 2021 年 6 月 25 日
Is there any way to change the default value of a super class property in the property block of a subclass? I know I can change it in the constructor method, but the semantics of that doesn't seem right. Also making the property abstract in the super class is inconvenient because then you can't really directly instantiate the superclass. is there any solution to this?
  5 件のコメント
Matt J
Matt J 2012 年 10 月 3 日
Also explain what you mean by "I know I can change it in the constructor method, but the semantics of that doesn't seem right." I don't see how there could be anything semantically wrong with setting the value in the constructor. It seems like the most natural thing to do.
Nicholas Dinsmore
Nicholas Dinsmore 2012 年 10 月 3 日
This is what I would like to do
classdef superclass < handle
properties
CalculateMode=1; %1=option1 2=option2
end
end
classdef subclass < superclass
properties
CalculateMode=2;
end
end

サインインしてコメントする。

採用された回答

Matt J
Matt J 2012 年 10 月 3 日
編集済み: Matt J 2012 年 10 月 3 日
Abandon this and set the value of CalculateMode in the constructor. It's the appropriate thing to do.

その他の回答 (2 件)

Philip M
Philip M 2021 年 6 月 25 日
Overriding a superclass property with a subclass property involes a few hurdles, but overwriting a superclass method with a subclass property is simple. This allows the superclass to define a set of defaults, and allows the subclasses to modify those defaults without requiring the subclasses to repeat the same lines of code in each constructor.
The concept in its absolute simplest form:
classdef Super
properties
CalculateMode
end
methods
function obj=Super
obj.CalculateMode=obj.CalculateModeSetting;
end
function out=CalculateModeSetting(~)
out=1;
end
end
end
classdef Sub < Super
properties
CalculateModeSetting=2
end
end
Which gives:
>> Super
ans =
Super with properties:
CalculateMode: 1
>> Sub
ans =
Sub with properties:
CalculateModeSetting: 2
CalculateMode: 2

Daniel Shub
Daniel Shub 2012 年 10 月 3 日
The only other way I can think to do this is to have the superclass constructor take an CalculateMode as an optional argument. Then the subclass constructor would pass the mode to the superclass.

カテゴリ

Help Center および File ExchangeSubclass Definition についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by