Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #34266

Re: When to use dynamic binding over dynamic dispatch?

From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: When to use dynamic binding over dynamic dispatch?
Date 2016-05-08 10:37 -0400
Organization Aioe.org NNTP Server
Message-ID <ngniup$8u0$1@gioia.aioe.org> (permalink)
References <ebf7e9a1-18b1-4d36-91ef-7dc93d0bf25a@googlegroups.com> <ngbitr$70c$1@gioia.aioe.org> <dp8if4Fqm9cU1@mid.individual.net> <ngnb33$1rif$1@gioia.aioe.org> <ngnctb$pp9$1@dont-email.me>

Show all headers | View raw


On 5/8/2016 8:57 AM, Eric Sosman wrote:
> On 5/8/2016 8:23 AM, Arne Vajhøj wrote:
>> On 5/8/2016 6:24 AM, Robert Klemme wrote:
>>> On 04.05.2016 03:23, Arne Vajhøj wrote:
>>>> All methods unless declared static or final are virtual in Java,
>>>> so dynamic dispatch is used all the time.
>>>
>>> Methods declared as "final" are virtual as well.
>>
>> Given that:
>>
>> virtual method = method that can be overridden
>> final method = method that can not be overridden
>>
>> then how can it be?
>
>     class Super {
>         public void method() {}
>     }
>
>     class Sub extends Super {
>         public final void method() {}
>     }
>
>     ...
>
>     Super obj = new Sub();
>     obj.method();

As a starting point I would not call Sub.method
a virtual method due to above definition.

But per JLS such calls are "invocation mode virtual".

<quote>
The invocation mode, computed as follows:

     If the qualifying type of the method declaration is a class, then:

         If the compile-time declaration has the static modifier, then 
the invocation mode is static.

         Otherwise, if the compile-time declaration has the private 
modifier, then the invocation mode is nonvirtual.

         Otherwise, if the part of the method invocation before the left 
parenthesis is of the form super . Identifier or of the form TypeName . 
super . Identifier, then the invocation mode is super.

         Otherwise, the invocation mode is virtual.

     If the qualifying type of the method invocation is an interface, 
then the invocation mode is interface.
</quote>

If we make the logical conclusion that methods that will be called
with invocation mode virtual are virtual methods, then the definition
of virtual methods is certainly different in Java.

You don't even have to override a method to make it invocation
mode virtual.

So even:

public class Funny {
     public final void m() {
         System.out.println("I am funny");
     }
     public static void main(String[] args) {
         Funny o = new Funny();
         o.m();
     }
}

result in:

  9: invokevirtual #7                  // Method m:()V

Well ...

Arne

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

When to use dynamic binding over dynamic dispatch? cdalten@gmail.com - 2016-05-02 18:08 -0700
  Re: When to use dynamic binding over dynamic dispatch? Sebastian <news@seyweiler.dyndns.org> - 2016-05-03 20:47 +0200
    Re: When to use dynamic binding over dynamic dispatch? Lew <lewbloch@gmail.com> - 2016-05-03 12:14 -0700
  Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-03 21:23 -0400
    Re: When to use dynamic binding over dynamic dispatch? Martin Gregorie <martin@address-in-sig.invalid> - 2016-05-04 10:48 +0000
    Re: When to use dynamic binding over dynamic dispatch? Robert Klemme <shortcutter@googlemail.com> - 2016-05-08 12:24 +0200
      Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 08:23 -0400
        Re: When to use dynamic binding over dynamic dispatch? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-08 08:57 -0400
          Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 10:37 -0400
            Re: When to use dynamic binding over dynamic dispatch? Robert Klemme <shortcutter@googlemail.com> - 2016-05-08 22:30 +0200
              Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 23:08 -0400
                Re: When to use dynamic binding over dynamic dispatch? Robert Klemme <shortcutter@googlemail.com> - 2016-05-09 08:16 +0200
            Re: When to use dynamic binding over dynamic dispatch? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-08 16:44 -0400
              Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 23:16 -0400
                Re: When to use dynamic binding over dynamic dispatch? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-09 00:39 -0400

csiph-web