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

时间:2011-09-22 19:32:11

标签: 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!");
     }
}

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

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

2 个答案:

答案 0 :(得分: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!");
    }
}

答案 1 :(得分:2)

也许过度参与,但在MyClass.foo(String strs[])内,您可以检查来电者是否为SomeBaseClass.foo(String str),如果是,请将来电转至super.foo(String)其他throw RuntimeException

要查找来电显示StackTrace