2014-10-21 3 views
2

Возможно ли, что переопределенный метод будет разрешен статически?Переопределенные методы и динамическое связывание

А какова связь между Invoke virtual и dynamic binding? Все ли вызовы виртуальных методов динамически связаны?

class Dynamic 
{ 
    public void display() 
    { 
     System.out.println("in dynamic"); 
    } 
    public static void invoke(Dynamic x) 
    { 
     x.display(); 
    } 
} 

здесь x.display показывает invoke virtual? что это означает? означает ли это, что он динамически связан?

+0

Что вы хотите достичь, а какие проблемы с конкретикой * конкретного * вы наткнулись? – Smutje

+0

В java нет концепции виртуального метода. – Rustam

+0

Просто делал некоторые исследования и наткнулся на эту тему, где кто-то написал этот код, не расширив другой класс, а при разборе он показал, что он вызывает виртуальный, и сказал, что даже это динамически связывает – curositykiller

ответ

1

Нет. Методы переопределения не могут быть разрешены во время компиляции. Они разрешаются во время Runtime на основе типа объекта.

InvokeVirtual - это способ байт-кода сообщить вам, что метод был вызван.

+0

ТАК почему существует 4 разных способа? вызывать static, invoke special, invoke virtual и invoke interface? – curositykiller

+0

@curositykiller - invoke static для * статических методов * 'String.valueO()', * invoke Specia * для * constructors *, * invoke virtual * для любого нестатического метода (SOP). – TheLostMind

+0

так что вызывать virtual не нужно ничего делать с динамическим привязкой? – curositykiller

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