Dobry den, > "se jedna o promennou tridy, nikoliv instance" To je prave velmi nepresna formulace a vede k zmatkum o kterych pise pan Stohr. Java totiz vlastne zadne atributy (fieldy) ani metody tridy nema - trida totiz neni objekt. Porovnejte napr. se Smalltalkem.
K tomu puvodnimu dotazu: Staticke metody a promene jsou vlastne jen globalni funkce/promenne. Jejich umisteni v urcite tride ma vliv jen na jmenny prostor a pripadne (u ne-public) na pristupova prava. > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] Behalf Of Daniel Holešínský > Sent: Tuesday, May 22, 2007 10:21 AM > To: Java > Subject: Re: Naprosto zacátecnický dotaz > > > Dobry den, > > jestlize deklarujete promennou jako static tak rikate, ze se jedna o > promennou tridy, nikoliv instance. Tzn. vsichni potomci tridy > SigletonBase sdileji stejny atribut >>instance<< a jeho > hodnotu. Bezne > pouziti atributu jako static je napr. pri deklaraci konstant atd. > > DH > > Stöhr Miroslav RNDr. Ph.D. napsal(a): > > Vážení kolegové, > > > > nějak jsem se zamotal s naprosto začátečnickým problémem, > za což se stydím, ale mohli by jste mi pomoci? > > > > Mám následující tři classy: > > > > public abstract class SigletonBase { > > > > protected static SingletonBase instance; > > > > private SingletonBase(){ > > // nejaka nepodstatna konfigurace > > } > > > > public abstract void methodA(); > > > > public void methodP(){ > > // nejaka spolecna implementace > > } > > } > > > > public class SingletonOne extends SingletonBase { > > > > static { > > SingletonOne.instance = new SingletonOne(); > > } > > > > private SingletonOne(){ > > // dalsi inicializace > > } > > > > public static SingletonOne getInstance(){ > > return (SingletonOne)instance; > > } > > > > protected void methodA(){ > > // implementace A > > } > > > > } > > > > public class SingletonTwo extends SingletonBase { > > > > static { > > SingletonTwo.instance = new SingletonTwo(); > > } > > > > private SingletonTwo(){ > > // dalsi inicializace, ale jina nez u SingletonOne > > } > > > > public static SingletonTwo getInstance(){ > > return (SingletonTwo)instance; > > } > > > > protected void methodA(){ > > // implementace A, ale jina nez u SingletonOne > > } > > > > } > > > > > > A otazka: Je tento konstrukt bezpečný ve smyslu že mám > zajištěno, že vždy instance SingletonOne bude jiná než > SingletonTwo? Jedna se mi o to, když mám zděděné pole, které > je static, jestli opravdu patří pouze classu, který > inicializuji, nikoliv classu jeho předka (který je v mém > případě společný). Koukal jsem se do java spec. a moudrý z > toho nejsem, zkušební projekt po kompilaci a spuštění mi > řekne, že jsou to dvě oddělené instance (JDK 1.4.2), ale > pořád si nejsem jistý jestli nedělám naprosto školáckou > chybu. Stačí nasměrovat na patřičnou sekci v java spec. > > > > Děkuji za objasnění. > > > > Mirek > > > > > > > >
