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


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

Re: Partially overriding a method?

From Eric Sosman <esosman@ieee-dot-org.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: Partially overriding a method?
Date 2011-04-21 21:10 -0400
Organization A noiseless patient Spider
Message-ID <ioqkil$3us$1@dont-email.me> (permalink)
References <ea560a6d-7156-4801-87c5-3b533b57c420@cu4g2000vbb.googlegroups.com>

Show all headers | View raw


On 4/21/2011 11:31 AM, raphfrk@gmail.com wrote:
> I was wondering if it is possible to override a method but only for
> certain sub-classes of the method that the super-class supports.
>
> For example:
>
> class MainClass {
>
>      public static void main(String[] args) {
>
>          System.out.println("Started");
>
>          MainClass mc = new SubClass();
>
>          mc.check("Testing");
>          mc.check(7);
>
>      }
>
>      void check(Object x) {
>          System.out.println(x.toString());
>      }
>
> }
>
>
> class SubClass extends MainClass {
>
>      void check(String x) {
>          System.out.println("Sub class: " + x);
>      }
>
> }
>
> The call to mc.check() calls the main class's version of the method.
>
> However, if I change the sub-class to:
>
> class SubClass extends MainClass {
>
>      void check(Object x) {
>          System.out.println("Sub class: " + x);
>      }
>
> }
>
> then it uses the sub-class always.

     Right.  You've made the mistake (and you're not the first,
nor the last) of confusing overRIDING with overLOADING.  In your
first example, the `check' method of SubClass does not override
the `check' method of MainClass; is is an overload (of the `check'
identifier).  SubClass has two different methods named `check':

	void check(String) ... // inherited
	void check(Object) ... // defined locally

     In your second example things are quite different: SubClass
has only one `check' method:

	void check(Object) ... // overrides MainClass method

Note that this `check' has exactly the same signature as the
MainClass `check'; that's why it overrides.  In your first example
the two `check' methods have different signatures and have nothing
to do with each other, as you may see by experimenting with

	class HeroClass extends MainClass {
	    double check(short shrift, String along) ...
	}

-- 
Eric Sosman
esosman@ieee-dot-org.invalid

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


Thread

Partially overriding a method? "raphfrk@gmail.com" <raphfrk@gmail.com> - 2011-04-21 08:31 -0700
  Re: Partially overriding a method? Lew <noone@lewscanon.com> - 2011-04-21 12:42 -0400
  Re: Partially overriding a method? markspace <-@.> - 2011-04-21 11:37 -0700
    Re: Partially overriding a method? Lew <noone@lewscanon.com> - 2011-04-21 15:58 -0400
  Re: Partially overriding a method? Michal <kleku75@gmail.com> - 2011-04-21 21:00 +0200
  Re: Partially overriding a method? Roedy Green <see_website@mindprod.com.invalid> - 2011-04-21 12:59 -0700
  Re: Partially overriding a method? Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-04-21 21:10 -0400
    Re: Partially overriding a method? "raphfrk@gmail.com" <raphfrk@gmail.com> - 2011-04-24 09:39 -0700

csiph-web