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
> >
> >
> >   
> 
> 

Odpovedet emailem