是否有任何解决方法可以在具有不同名称的子类方法中调用超类方法?
Is there any workaround to call a superclass method in a subclass method with a different name?
我有一个superclass定义了几个方法,在派生的subclass中class,(a)我想保留这些方法,因为它们仍然很有用,但我想给他们另一个名字,因为 (b) 对于与 superclass 中同名的方法,我想给他们一个不同的函数。
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不允许的。
但这对我来说很自然地调用具有相同名称的方法 superclass 和 subclass 产生不同的结果,同时仍然希望 superclass 中的方法活着以防我需要.是否有任何解决方法或有更好的 OOP 概念来避免这种情况?
如果您希望能够使用 class sub
的对象调用 method1@sup
,则不应覆盖 method1
函数。如果你覆盖一个函数,你是说基础 classes 的函数不适合这个 class 并且需要以不同的方式工作。
您可能只想编写一个具有不同名称的函数。
这样做的一种方法是将 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
我有一个superclass定义了几个方法,在派生的subclass中class,(a)我想保留这些方法,因为它们仍然很有用,但我想给他们另一个名字,因为 (b) 对于与 superclass 中同名的方法,我想给他们一个不同的函数。
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不允许的。 但这对我来说很自然地调用具有相同名称的方法 superclass 和 subclass 产生不同的结果,同时仍然希望 superclass 中的方法活着以防我需要.是否有任何解决方法或有更好的 OOP 概念来避免这种情况?
如果您希望能够使用 class sub
的对象调用 method1@sup
,则不应覆盖 method1
函数。如果你覆盖一个函数,你是说基础 classes 的函数不适合这个 class 并且需要以不同的方式工作。
您可能只想编写一个具有不同名称的函数。
这样做的一种方法是将 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