заставить базовый класс использовать свой собственный метод, а не переопределенный метод - PullRequest
4 голосов
/ 22 сентября 2011

вот мой сценарий:

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 []). Следовательно, когда я вызываю foo (String str) из MyClass, я получаю исключение во время выполнения. Как я могу сказать SomeBaseClassclass использовать SomeBaseClass :: foo (String strs []) и все другие классы использовать MyClass :: foo (String strs [])

Ответы [ 2 ]

5 голосов
/ 22 сентября 2011

Рассмотрим написание оболочки

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!");
    }
}
2 голосов
/ 22 сентября 2011

Возможно, через engg, но внутри MyClass.foo(String strs[]) вы можете проверить, является ли вызывающий абонент SomeBaseClass.foo(String str), если да, переведите вызов на super.foo(String) иначе throw RuntimeException.

Чтобы найти абонента, проверьте StackTrace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...