是否有任何解决方法可以在具有不同名称的子类方法中调用超类方法?

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.method1sub.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