我有一個超類定義了幾個方法,并且在派生的子類中,(a)我想保留這些方法,因為它們仍然非常有用,但是我想給它們另一個名字,因為(b)對于具有相同名稱的方法就像在超類中一樣,我想給它們一個不同的功能。
classdef sup
methods
function [] = method1(obj,val)
fprintf('sup val=%g\n',val);
end
end
end
classdef sub < sup
methods
function [] = method1(obj,val)
fprintf('sub val=%g\n',val);
end
function [] = method2(obj,val)
method1@sup(obj,val);
end
end
end
這是 matlab 不允許的。但這對我來說很自然地為超類和子類呼叫具有相同名稱的方法會導致不同的結果,同時仍然希望超類中的方法在我需要的情況下仍然存在。是否有任何解決方法或有更好的 OOP 概念來避免這種情況?
uj5u.com熱心網友回復:
如果您希望能夠method1@sup使用 class 的物件進行呼叫sub,則不應覆寫該method1函式。如果你重寫一個函式,你是說基類的函式不適合這個類,需要以不同的方式作業。
您可能只想撰寫一個具有不同名稱的函式。
這樣做的一種方法是將 的實作sup.method1放在一個受保護的函式中,然后您可以從sup.method1和呼叫它sub.method2:
classdef sup
methods
function method1(obj,val)
method1_impl(obj,val);
end
end
methods(Access=protected)
function method1_impl(obj,val)
fprintf('sup val=%g\n',val);
end
end
end
classdef sub < sup
methods
function method1(obj,val)
fprintf('sub val=%g\n',val);
end
function method2(obj,val)
method1_impl(obj,val);
end
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/417586.html
標籤:
