2013-03-09 3 views
-1

Это странно сформулированный вопрос, поэтому я приношу свои извинения, если это дубликат.Метод суперкласса с использованием переопределенных методов подкласса

Скажем, у меня есть класс foo с методом a, который вызывает метод b:

public class foo 
{ 
    public void a() 
    { 
     b(); 
    } 

    public void b() 
    { 
     gamma(); 
    } 
} 

Теперь у меня есть подкласс bar, который расширяет foo

public class bar extends foo 
{ 
    @Override 
    public void b() 
    { 
     theta(); 
    } 
} 

Если я позвоню bar.a(), будет a использовать b метод из суперкласса или метод b из подкласса? То есть, будет bar.b() в конечном итоге выполнение gamma или это закончится с выполнением theta?

+5

Нет проблем с запросом, так как у вас есть написанный код, вы можете просто проверить его самостоятельно, выполнив вход в систему или просто записав его на консоль. Я всегда счастлив провести эксперименты такого рода, чтобы это произошло. Таким образом, вы можете иногда находить новые способы сделать что-то, что вы не могли бы отступать в этот момент, но позже вы сочтете полезным сделать это уже. Иногда вы можете изобретать колесо, но с любопытством и, делая всевозможные мелочи самостоятельно, вы узнаете намного больше, чем просто получить ответ – Wolfii

ответ

1

Он будет использовать метод b из подкласса. Это точка переопределения методов. Подкласс, расширяющий родительский объект, может свободно создавать более конкретные реализации метода. Когда переопределенный метод вызывается в подклассе, его специализированный метод будет использоваться вместо метода суперкласса.

0

f Я вызываю bar.a(), будет использовать метод b из суперкласса или b из подкласса? То есть, bar.b() завершит выполнение гаммы или это закончит выполнение тэта?

Он будет использовать метод bar.b(). Это результат dynamic dispatch.

Смежные вопросы