Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #34272
| Path | csiph.com!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail |
|---|---|
| From | Robert Klemme <shortcutter@googlemail.com> |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: When to use dynamic binding over dynamic dispatch? |
| Date | Mon, 9 May 2016 08:16:02 +0200 |
| Lines | 134 |
| Message-ID | <dpao94F9eg1U1@mid.individual.net> (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> <ngniup$8u0$1@gioia.aioe.org> <dp9lveF3ctkU1@mid.individual.net> <ngov04$aop$1@gioia.aioe.org> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=utf-8; format=flowed |
| Content-Transfer-Encoding | quoted-printable |
| X-Trace | individual.net OxIL4F4iBQPkkppSnuWJiAY0+w+tL/urClju+h2Xq5kCje8t8= |
| Cancel-Lock | sha1:oCExNZOekRnZr+vDllF3gT16uek= |
| User-Agent | Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 |
| In-Reply-To | <ngov04$aop$1@gioia.aioe.org> |
| Xref | csiph.com comp.lang.java.programmer:34272 |
Show key headers only | View raw
On 09.05.2016 05:08, Arne Vajhøj wrote:
> On 5/8/2016 4:30 PM, Robert Klemme wrote:
>> On 08.05.2016 16:37, Arne Vajhøj wrote:
>>> 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.
>>
>> That seems to me a fairly uncommon definition. For me a virtual method
>> uses dynamic dispatch (late binding) as described in Wikipedia:
>> https://en.wikipedia.org/wiki/Virtual_method
>
> Well - it is actually mentioned as one possibility in the link
> you provide so ...
I had thought so for a brief moment, too, but now I do not. The point
is, the sentence is ambiguous. Here are two ways you can understand it:
"In object-oriented programming, a virtual function or virtual method is
( an inheritable and overridable function ) or ( method for which
dynamic dispatch is facilitated )."
"In object-oriented programming, a virtual function or virtual method is
an inheritable and overridable ( function or method ) for which dynamic
dispatch is facilitated."
Now, given the remainder of the article I believe the only valid
interpretation in this context is the second one. This is also
suggested by the "a virtual function or virtual method" which indicates
that the definition is intended for functions and methods as well.
>>> But per JLS such calls are "invocation mode virtual".
>>
>> Hence it's a virtual method in my book.
>>
>>> 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.
>>
>> Certainly different from the definition you offered above. Ironically
>> your first statement matches the definition of "virtual method" that I
>> have in mind much better because it speaks of "dynamic dispatch", i.e.
>> does not make a statement about whether it can be overridden and instead
>> focuses on invocation semantics.
>
> I just find it very difficult to see:
>
> 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();
> }
> }
>
> as a virtual method. And there is no need for dynamic dispatch.
> Java just uses the same instruction as when dynamic dispatch
> is needed.
"final" and "virtual" are two orthogonal concepts: "final" is an
instruction to the compiler to not compile a method with the same
signature in classes inheriting from the class owning the final method.
(Additionally the JVM will verify on class load that this constraint
holds.)
"virtual" describes a technique of method dispatch also commonly called
"late binding". It means the method to call is determined at runtime
vs. at compile time for non virtual methods. You can also have a
virtual method in C++ in a class declared "final" (since C++11, see [1])
which effectively renders all methods unoverridable. I mention C++ here
because there it actually makes a difference for the invocation whether
a method is declared "virtual" or not.
In Java virtual method invocation is the default and only static and
private methods are the exceptions. I use "virtual" in the conceptual
sense including "invokevirtual" and "invokeinterface" because both
employ late binding.
Can you provide more background how you got to this definition you are
using?
virtual method = method that can be overridden
Kind regards
robert
[1] https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Final_Class
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
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