Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!news.stack.nl!aioe.org!newsfeed.CARNet.hr!garrison.bnet.hr!gregory.BNet.hr!not-for-mail From: Josip Almasi Newsgroups: comp.lang.java.programmer Subject: Re: Java blunders Date: Tue, 29 Jul 2014 01:54:42 +0200 Organization: B.net Hrvatska d.o.o. Lines: 35 Message-ID: References: NNTP-Posting-Host: 188.252.184.14 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: gregory.bnet.hr 1406591682 6076 188.252.184.14 (28 Jul 2014 23:54:42 GMT) X-Complaints-To: abuse@globalnet.hr NNTP-Posting-Date: Mon, 28 Jul 2014 23:54:42 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 In-Reply-To: Xref: csiph.com comp.lang.java.programmer:29421 On 07/29/2014 01:02 AM, Stefan Ram wrote: > Josip Almasi writes: >> So I can access 'this' and members in default implementations, right? >> I mean examples I see are all static implementations. > > interface Build > { java.lang.StringBuilder builder(); > default void build(){ this.builder().append( "alpha1" ); }} > > interface Print > { java.lang.StringBuilder builder(); > default void print() > { java.lang.System.out.println( this.builder() ); }} > > public class Main implements Build, Print > { final java.lang.StringBuilder builder = new java.lang.StringBuilder(); > public java.lang.StringBuilder builder(){ return this.builder; } > public static void main( final java.lang.String args[] ) > { final Main main = new Main(); main.build(); main.print(); }} But you didn't adress any member of Main class. In fact builder method needs to be defined 3 times, and it's only purpose is to return reference to member variable. Thus, above is good example what interfaces should not be used for. Seems only efficient way to access Main members is to pass Main instance to default implementation as argument. (then better use code blocks) Same old, hopefully with less copy&paste. Poor substitute for multiple inheritance. But thanks again, these are good hints. In fact they address example in my point 2, with overriding static variables. Err, maybe. Will have to try:) Regards...