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