Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #30223
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Object orientation question |
| Date | 2014-10-28 08:33 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <m2o2e0$ak0$2@dont-email.me> (permalink) |
| References | <0b94f856-9631-48ee-8d2d-94055d79cfd6@googlegroups.com> <m2mb82$cef$1@dont-email.me> <cb80jkFmoa9U1@mid.individual.net> <slrnm4upel.fp3.avl@login.logic.tuwien.ac.at> <m2o27l$ak0$1@dont-email.me> |
On 10/28/2014 8:29 AM, Eric Sosman wrote:
> On 10/28/2014 5:45 AM, Andreas Leitgeb wrote:
>> Robert Klemme <shortcutter@googlemail.com> wrote:
>>> On 27.10.2014 21:51, Eric Sosman wrote:
>>>> Clearly, the generated code is the same: AdditionInterface
>>>> extends
>>>> BaseInterface, therefore any class implementing AdditionInterface also
>>>> necessarily implements BaseInterface. If the class fails to provide a
>>>> method specified by BaseInterface, the code won't compile. So the
>>>> question is purely about readability and style.
>>> This is not fully correct: if you check with reflection you will see
>>> that there is a difference in what Class.getInterfaces() returns.
>>
>> You don't even need reflection to notice a difference:
>>
>> interface A { ... } | interface A { ... }
>> interface B { ... } | interface B extends A { ... }
>> class C implements A,B { ... } | class C implements B { ... }
>> ... | ...
>> B foo = new C(); | B foo = new C();
>> A bar = foo; // barf! | A bar = foo; // ok
>>
>> Instead of the second assignment you could have a call to a
>> method that takes an A and gets passed B-typed reference foo.
>
> My Java compiler (Oracle's 1.8.0_20 on 64-bit Windows 7)
> doesn't "barf" as you report. Has something changed? Are you
> using a different javac? Here's the code; I've fleshed out
> the ellipses and changed one name:
>[...]
Ah, but I mis-read your post! On the left you have A and B as
completely independent interfaces, whereas on the right one is a
sub-interface of the other. The O.P. wrote (emphasis mine)
We have an interface called BaseIface and then we have a
BaseImpl. Then we have AddtionInterface and AdditionImpl.
*AdditionInterface is a BaseInterface.*
... so your left-hand case is different from the situation he
asked about, and which I was addressing. Sorry for the confusion.
--
esosman@comcast-dot-net.invalid
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Object orientation question mike <mikaelpetterson@hotmail.com> - 2014-10-27 13:26 -0700
Re: Object orientation question Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-10-27 16:51 -0400
Re: Object orientation question Robert Klemme <shortcutter@googlemail.com> - 2014-10-27 23:51 +0100
Re: Object orientation question Andreas Leitgeb <avl@auth.logic.tuwien.ac.at> - 2014-10-28 09:45 +0000
Re: Object orientation question Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-10-28 08:29 -0400
Re: Object orientation question Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-10-28 08:33 -0400
Re: Object orientation question Andreas Leitgeb <avl@auth.logic.tuwien.ac.at> - 2014-10-28 16:26 +0000
Re: Object orientation question Robert Klemme <shortcutter@googlemail.com> - 2014-10-29 08:35 +0100
Re: Object orientation question Andreas Leitgeb <avl@auth.logic.tuwien.ac.at> - 2014-10-30 00:32 +0000
csiph-web