【问题标题】:Is there any workaround to call a superclass method in a subclass method with a different name?是否有任何解决方法可以在具有不同名称的子类方法中调用超类方法?
【发布时间】:2022-01-20 16:50:29
【问题描述】:

我有一个超类定义了几个方法,并且在派生的子类中,(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 概念来避免这种情况?

【问题讨论】:

    标签: matlab oop


    【解决方案1】:

    如果您希望能够使用 sub 类的对象调用 method1@sup,则不应覆盖 method1 函数。如果你重写了一个函数,你就是说基类的函数不适合这个类,需要不同的工作方式。

    您可能只想编写一个具有不同名称的函数。

    这样做的一种方法是将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
    

    【讨论】:

    • 谢谢@Cris Luengo,为什么我没想到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    相关资源
    最近更新 更多