Ah, but not really... ;-)

A subclass cannot override methods that are declared static in the
superclass. In other words, a subclass cannot override a class method. A
subclass can /hide/ a static method in the superclass by declaring a static
method in the subclass with the same signature as the static method in the
superclass. Overriding only applies to instance methods, class methods
behave differently (ah, longing for Smalltalk). A class method can be
/shadowed/ by a subclass but not overridden (not to be confused with method
overloading of course ;-)
 
Here is a fun experiment with statics that always comes and bites you in the
you-know-where:

package test;

class SubC extends SuperC {
        static String hi() {
                return "I am Sub";
        }
}

class SuperC extends Object {
        static String hi() {
                return "I am Super";
        }
}

public class TestSuperStatic {

        public static void main(String[] args) {
                SuperC a = new SuperC();
                SubC b = new SubC();
                SuperC c = b;
                System.out.println(a.hi() + ", " + a.getClass());
                System.out.println(b.hi() + ", " + b.getClass());
                System.out.println(c.hi() + ", " + c.getClass());
        }

}

Can you guess what gets printed out? :-)

(and no cheating by running the code!)

Gary

-----Original Message-----
From: Stephen Colebourne [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, July 29, 2003 14:30
To: Jakarta Commons Developers List
Subject: Re: [lang] DEVELOPERS-GUIDE.html

In this use case, everybody uses UString, so you can effectively override.

If you code the same method in the 'subclass', and refer to it using the
subclass class then it will be called.

Stephen

----- Original Message -----
From: "Gary Gregory" <[EMAIL PROTECTED]>
> When you do that, do remember that you cannot override static methods in
the
> same way that you can with instance methods.
>
> Gary
>
> -----Original Message-----
> From: Stephen Colebourne [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, July 29, 2003 14:07
> To: Jakarta Commons Developers List
> Subject: Re: [lang] DEVELOPERS-GUIDE.html
>
> Because I want to create a subclass of StringUtils.
>
> Use case:
> I curently have a string utility class named UString.
> I plan to change that to extend StringUtils once 2.0 is released.
> (Because I'll get lots of extra methods for free)
> But I can only do that if StringUtils is not final.
>
> Stephen
>
>
> ----- Original Message -----
> From: "Henri Yandell" <[EMAIL PROTECTED]>
> To: "Jakarta Commons Developers List" <[EMAIL PROTECTED]>
> Sent: Tuesday, July 29, 2003 7:46 PM
> Subject: Re: [lang] DEVELOPERS-GUIDE.html
>
>
> >
> > Question just came up on [io].
> >
> > Why do we not make our XxxUtil classes final again? :) Anyone remember
or
> > should I trawl through the mail from last year?
> >
> > Hen
> >
> > On Tue, 29 Jul 2003 [EMAIL PROTECTED] wrote:
> >
> > > Plus1
> > > Stephen
> > >
> > > >  from:    Henri Yandell <[EMAIL PROTECTED]>
> > > >  date:    Tue, 29 Jul 2003 14:00:23
> > > >  to:      [EMAIL PROTECTED]
> > > >  subject: Re: [lang] DEVELOPERS-GUIDE.html
> > > >
> > > >
> > > > Just noticed that DEVELOPERS-GUIDE.html doesn't mention whether our
> > > > XxxUtils class should be final or not. I'm pretty sure we ended up
> making
> > > > them not final. Anyone object to this before I add a line to the
> guide?
> > > >
> > > > Hen
> > > >
> > > >
> > >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to