java  

Re: Class static VS singleton

Laurent Forêt
Tue, 10 Dec 2002 00:46:45 -0800

----- Original Message -----
From: "Remi Forax" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, December 09, 2002 6:52 PM
Subject: Re: Class static VS singleton


> Laurent Forêt wrote:
> > ----- Original Message -----
> > From: "Nicolas Delsaux" <[EMAIL PROTECTED]>
> > To: "Laurent Forêt" <[EMAIL PROTECTED]>
> > Sent: Monday, December 09, 2002 12:00 PM
> > Subject: Re: Class static VS singleton
> >
> >
> >>Le méthodes statiques ne fournissent pas d'héritage. La conséquence
> >
> > immédiate est qu'il n'est pas possible de redéfinir leur comportement,
ou
> > même de le spécialiser, dans le cas où une implémentation plus
spécialisée
> > (par exemple XML ou DB) peut être nécessaire.
> >
> > Pas complétement il est possible d'étendre ce genre de classe et on peut
> > redéfinir leur comportement :
> >
> > public class ClassUsingStatic {
> >   public static void staticMethod() {
> >     System.out.println("In ClassUsingStatic.staticMethod()");
> >   }
> > }
> > public class OtherClassUsingStatic extends ClassUsingStatic {
> >  public static void staticMethod() {
> >      System.out.println("In OtherClassUsingStatic.staticMethod()");
> >   }
> > }
> >
> > Est possible. Par contre, il est vrai que l'on ne peut pas hériter du
> > comportement de la classe mère :
> >
> > public class ClassUsingStatic {
> >   public static void staticMethod() {
> >     System.out.println("In ClassUsingStatic.staticMethod()");
> >   }
> > }
> > public class OtherClassUsingStatic extends ClassUsingStatic {
> >  public static void staticMethod() {
> >     super.staticMethod();
> >     System.out.println("In OtherClassUsingStatic.staticMethod()");
> >   }
> > }
> >
> > On a effectivement, une erreur de compilation :
> > OtherClassUsingStatic.java [4:1] non-static variable super cannot be
> > referenced from a static context
> >     super.staticMethod();
> >     ^
> > 1 error
>
> heu, pas bien compris le propos.
> On a le droit d'écrire :
>
> public class OtherClassUsingStatic extends ClassUsingStatic {
>    public static void staticMethod() {
>       ClassUsingStatic .staticMethod();
>       System.out.println("In OtherClassUsingStatic.staticMethod()");
>     }
>   }
>
C'est exact, et ça a le résultat voulu !
Mais, il n'empeche pas que l'on a pas hérité du comportement de la classe
mère.

> En fait, c'est sourtout le polymorphisme qui ne marche pas !!
Je vais y réfléchir avant de répondre ;) !

Après quelques minutes, j'ai écrit le code suivant :

public static void main(String[] args) {
    ClassUsingStatic myObj = new OtherClassUsingStatic();
    myObj.staticMethod();
}

Et, quelle fut ma surprise de voir en effet, dans ma console le résultat
suivant :
In StaticClass.staticMethod()

et je n'avais pas de "In OtherClassUsingStatic.staticMethod()".
Il ne semble donc pas possible de faire du polymorphisme avec des méthodes
statiques. Mais, je ne comprend pas pourquoi. Une explication ?

>
> Remi
>
Laurent.