force base class使用自己的方法而不是覆盖方法

PC.*_*PC. 4 java inheritance

这是我的情景:

class SomeBaseClass
{
     public void foo(String str)
     {
     .......
     }
     public void foo(String strs[])
     {
     .......
     }
}

class MyClass extends SomeBaseClass
{
     public void foo(String str)
     {
           super.foo(str);
     }
     public void foo(String strs[])
     {
           throw new RuntimeException("only one input please!");
     }
}
Run Code Online (Sandbox Code Playgroud)

逻辑非常简单."SomeBaseClass"是我无法修改的第三方工具.我想限制它的功能,不想允许foo(String strs []).

问题是在SomeBaseClass里面foo(Sting str)内部调用foo(String strs []).因此,当我调用MyClass的foo(String str)时,我得到一个运行时异常.如何告诉SomeBaseClassclass使用SomeBaseClass :: foo(String strs [])和所有其他类来使用MyClass :: foo(String strs [])

And*_*LED 5

考虑编写一个包装器

class MyClass extends SomeBaseClass
{
    private SomeBaseClass impl = new SomeBaseClass ();

    public void foo(String str)
    {
        impl.foo(str);
    }

    public void foo(String strs[])
    {
        throw new RuntimeException("only one input please!");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为应该指出*从`SomeBaseClass`继承的每一个方法*都必须转发到`impl`,如果`SomeBaseClass`的供应商决定在新版本中悄悄地添加一个新的成员函数,这会悄然破裂. (3认同)
  • 在我原来的实现中,SomeBaseClass有100个方法和属性.实现这样的实现是完全不好的做法,因为会有很多维护/升级问题. (2认同)