Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #34266
| 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> |
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
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