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


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

Re: Why only public methods on interfaces?

From Joshua Cranmer <Pidgeot18@verizon.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: Why only public methods on interfaces?
Date 2011-04-07 21:01 -0400
Organization A noiseless patient Spider
Message-ID <inlmpc$9tf$1@dont-email.me> (permalink)
References <25875c94-9af2-4d28-976d-2050a738ae2e@n10g2000yqf.googlegroups.com>

Show all headers | View raw


On 04/07/2011 08:09 PM, kramer31 wrote:
> Could someone please explain to me the rational behind only allowing
> public methods on interfaces?  In my mind, protection and interfaces
> are two independent if perhaps somewhat related concepts.

An interface is a public contract of methods that an object guarantees 
it will support. In my view, the idea of an interface is that you are 
letting someone else do the implementing. That "someone else" part 
implies that the methods can't be package-protected, since it might not 
be in your package. Private interface methods would of course be 
useless, and protected methods would be severely limited to only the 
implementing classes. In my mind, protected means "it's really private, 
but you need to have your children see or use them", which suggests that 
a protected method is inherently tied up in the implementation as 
opposed to an interface.

> For instance, I have an aspect which creates a proxy of a given
> interface (which handles transaction propagation).  Now in order to
> use this aspect, I need an interface (otherwise, no proxy can be
> created).  However, I have some methods on this class which I would
> like to proxy which are public, some are protected, some are package.
> Because of this stupid restriction, I have to make all of the methods
> public, or do ridiculous things with protection on inner classes.

You can use abstract classes where reasonable; where not reasonable, it 
is also possible to make top-level package-private interfaces.

> There are other examples, too.  In fact one could imagine a case where
> one would only want protected methods on an interface.

I would use an abstract class in that case. Think about stuff like an 
AbstractDefaultImpl class, which implements most of the methods on top 
of a simpler protected interface.

-- 
Beware of bugs in the above code; I have only proved it correct, not 
tried it. -- Donald E. Knuth

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


Thread

Why only public methods on interfaces? kramer31 <kramer.newsreader@gmail.com> - 2011-04-07 17:09 -0700
  Re: Why only public methods on interfaces? Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-04-07 21:48 -0300
  Re: Why only public methods on interfaces? Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-04-07 21:01 -0400
    Re: Why only public methods on interfaces? v_borchert@despammed.com (Volker Borchert) - 2011-04-08 02:43 +0000
      Re: Why only public methods on interfaces? Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-04-08 00:24 -0400
  Re: Why only public methods on interfaces? Patricia Shanahan <pats@acm.org> - 2011-04-07 21:49 -0700
    Re: Why only public methods on interfaces? Owen Jacobson <angrybaldguy@gmail.com> - 2011-04-08 01:01 -0400
      Re: Why only public methods on interfaces? Patricia Shanahan <pats@acm.org> - 2011-04-07 22:37 -0700
        Re: Why only public methods on interfaces? Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-04-08 00:14 -0700
          Re: Why only public methods on interfaces? Patricia Shanahan <pats@acm.org> - 2011-04-08 06:59 -0700
            Re: Why only public methods on interfaces? Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-04-08 07:17 -0700
              Re: Why only public methods on interfaces? Patricia Shanahan <pats@acm.org> - 2011-04-08 08:59 -0700
                Re: Why only public methods on interfaces? Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-04-08 17:27 -0700
                Re: Why only public methods on interfaces? "Mike Schilling" <mscottschilling@hotmail.com> - 2011-04-09 22:14 -0700
                Re: Why only public methods on interfaces? "Mike Schilling" <mscottschilling@hotmail.com> - 2011-04-09 22:28 -0700
                Re: Why only public methods on interfaces? Tom Anderson <twic@urchin.earth.li> - 2011-04-10 16:02 +0100
  Re: Why only public methods on interfaces? Roedy Green <see_website@mindprod.com.invalid> - 2011-04-08 03:18 -0700
    Re: Why only public methods on interfaces? Esmond Pitt <esmond.pitt@bigpond.com> - 2011-04-08 20:32 +1000
  Re: Why only public methods on interfaces? Tom Anderson <twic@urchin.earth.li> - 2011-04-08 20:34 +0100
  Re: Why only public methods on interfaces? Tom Anderson <twic@urchin.earth.li> - 2011-04-10 18:10 +0100

csiph-web