/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Static methods
Fra : Max Rotvel


Dato : 03-11-02 18:09

Hvad er logikken egentlig i at man kan kalde statiske metoder i
en klasse på en instans af klassen?

public class TestStatic
{
   public static void main(String[] args)
   {
      TestStaticMethod instans = new TestStaticMethod();
      System.out.println(instans.testStatic());
   }
}

public class TestStaticMethod
{
   private static String s = "static test";

   public static String testStatic()
   {
      return s;
   }
}

Virker fint...

Venlig hilsen
--
Max (rotvel at mail dot dk)

 
 
Bertel Lund Hansen (03-11-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 03-11-02 19:39

Max Rotvel skrev:

>Hvad er logikken egentlig i at man kan kalde statiske metoder i
>en klasse på en instans af klassen?

"Static" er ligegyldigt i den sammenhæng. Du laver et objekt af
typen TestStaticMethod, og som alle andre objekter har det adgang
til alle sine egne metoder - statiske eller ej.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Richard Flamsholt (03-11-2002)
Kommentar
Fra : Richard Flamsholt


Dato : 03-11-02 21:47

Max Rotvel <this.address@is.invalid> skrev:
>Hvad er logikken egentlig i at man kan kalde statiske metoder i
>en klasse på en instans af klassen?

Sikkert at det kunne være nyttigt. Efterfølgende har man erfaret, at det
ikke er en god skik og bør undgås. Statiske metoder overrides fx ikke i
nedarvede klasser og nedenstående lille eksempel viser, hvor forvirrende
den opførsel er:

   class A {
    public static void f() { System.out.print("A"); }
    public void g() { System.out.print("A"); }
   }
   class B extends A {
    public static void f() { System.out.print("B"); }
    public void g() { System.out.print("B"); }
   }
   ...
   A a = new A(); a.f(); a.g();
A b = new B(); b.f(); b.g();

Programmet udskriver "AAAB" fremfor "AABB", som mange vil forvente. Det
skyldes at statiske metoder på variablen b udledes fra dens klasse, som
er A, mens ikke-statiske metoder udledes fra dens værdi, som er en B.

Så derfor: undgå kald til statiske metoder på instanser.

--
Richard Flamsholt
richard@flamsholt.dk - www.richard.flamsholt.dk

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste