Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Pytania odnosnie Javy

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Fidel
żul



Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów

Skąd: Kraków

PostWysłany: Nie 2:17, 28 Sty 2007    Temat postu:

a ja mam pytanie z innej beczki, czym dokladnie jest klasa static w javie? jedyne o czym wiem, to ze moze korzystac tylko ze statycznych zmiennych i metod funkcji zewnetrznej. ale czy jest cos jeszcze? i czy klasa statyczna moze nie byc wewnetrzna klasa jakiejs innej klasy?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Nie 2:27, 28 Sty 2007    Temat postu:

Klasa statyczna może być tylko składową innnej klasy.

Różnica jest dosyć prosta do zrozumienia. Normalnie instancje klasy wewnętrznej mają odnośnik na this klasy zewnętrznej - zawsze istnieją w powiązaniu z obiektem klasy zewnętrznej - nie można utworzyć wprost klasy wewnętrznej bez związku z klasą zewnętrzną.

Klasa wewnętrzna static nie ma tego związku, zatem nie może się odwoływać do skłądowych (ani do samego obiektu) klasy zewnętrznej - ale za to może mieć instancje niezależne od instancji klasy zewnętrznej.

Dodam może jeszcze, że w klasach wewn. niestatycznych można użyć konstrukcji typu KlasaZewnetrzna.this


Ostatnio zmieniony przez Pawel Str. dnia Nie 3:05, 28 Sty 2007, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Skrobocik
[SKROBORANGA]



Dołączył: 29 Lis 2005
Posty: 2958
Przeczytał: 0 tematów

Skąd: Skarżysko , Kraków

PostWysłany: Nie 2:27, 28 Sty 2007    Temat postu:

Klasa statyczna wewnętrzna może być, ale wtedy to tak jakby była normalnie publiczna ;)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Nie 2:29, 28 Sty 2007    Temat postu:

@Skrobocik - nie.

Na przykład inne uprawnienia.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
chlebek
alkoholik



Dołączył: 04 Lut 2006
Posty: 556
Przeczytał: 0 tematów

Skąd: Siedlce\Kraków

PostWysłany: Nie 2:42, 28 Sty 2007    Temat postu:

Pawel Str. napisał:

Klasa wewnętrzna static nie ma tego związku, zatem nie może się odwoływać do skłądowych (ani do samego obiektu) klasy zewnętrznej - ale za to może mieć instancje niezależne od instancji klasy wewnętrzna

moglbys wytlumaczyc jescze raz inczej to po sredniku ;p
Ale jak stworze zmienna statyczna w klasie zewnetrznej to moge ja wykorzystac w klasie wenetrznej statycznej ?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Nie 2:50, 28 Sty 2007    Temat postu:

@chlebek - nie widzę średnika :-)

Jak mam klasę wewn. niestatyczną, to mogę zrobić coś takiego:

Kod:

class Zewnetrzna {
   
   void doSth() {}

   class Wewnetrzna {
      void doSthDifferent() {
         doSth();
         // rownowazne:
         Zewnetrzna.this.doSth();

         Object obj = Zewnetrzna.this;
         ObjectEater.eat(Zewnetrzna.this); //zakladajac, ze mamy ObjectEatera ze statyczna metoda eat()
      } 
   }
}

W klasie wewnętrznej statycznej to nie działa, bo nie ma referencji Zewnetrzna.this

Można za to zrobić coś takiego:

Kod:

class C2 {
   static class InnerStatic {
   }
}


class C1 {
  void testuj() {
     C2.InnerStatic c = new C2.InnerStatic();
  }

}

czego nie da się zrobić z klasą wewn. niestatyczną - bo klasy wewn. niestatyczne zawsze żyją w związku z instancjami klas zewnętrznych.

Powiedziałbym, że ta referencja na this klasy zewnętrznej ma tę samą rolę, co w wypadku metod statycznych/niestatycznych.


-- edit --
Tak, oczywiście klasa wewn. statyczna może się odwoływać do statycznych składowych klasy zewnętrznej - bo do tego nie potrzeba referencji this do klasy zewnętrznej.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Fidel
żul



Dołączył: 19 Lis 2005
Posty: 649
Przeczytał: 0 tematów

Skąd: Kraków

PostWysłany: Nie 2:58, 28 Sty 2007    Temat postu:

i jest tez tak ze klasa zewnetrzna ma dostep do wszystkich (nawet prywatnych) atrybutow klasy wew i na odwrot, tak?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Nie 3:01, 28 Sty 2007    Temat postu:

Tak.

-- edit --
Trzeba by się w końcu wyspać.


Ostatnio zmieniony przez Pawel Str. dnia Nie 3:07, 28 Sty 2007, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
chlebek
alkoholik



Dołączył: 04 Lut 2006
Posty: 556
Przeczytał: 0 tematów

Skąd: Siedlce\Kraków

PostWysłany: Nie 3:03, 28 Sty 2007    Temat postu:

sorry za blad mialo byc od myslnika, ale skoro juz wyjasniles to dzieki ;]
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
pazabo
pijak



Dołączył: 02 Lut 2006
Posty: 60
Przeczytał: 0 tematów

Skąd: Kraków

PostWysłany: Nie 14:12, 28 Sty 2007    Temat postu:

Interfejsy zagnieżdżone są domyślnie statyczne, a co do składowych statycznych to można je dawać w klasach wewnętrznych jeśli tylko są "compile-time constants", przykład ze specyfikacji języka:

Kod:
class Outer{
    class Inner extends HasStatic{
        static final int x = 3;         // ok - compile-time constant
        static int y = 4;          // compile-time error, an inner class
    }
    static class NestedButNotInner{
        static int z = 5;          // ok, not an inner class
    }
    interface NeverInner{}            // interfaces are never inner
}


Dodatkowo, żeby odwołać się do zmiennych klasy zewnętrznej nie trzeba używać KlasaZewnętrzna.this, chytba że jest kolizja oznaczeń. Kolejny przykład:
Kod:
class WithDeepNesting{
    boolean toBe;
    WithDeepNesting(boolean b) { toBe = b;}
    class Nested {
        boolean theQuestion;
        class DeeplyNested {
            DeeplyNested(){
                theQuestion = toBe || !toBe;
            }
        }
    }
}
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin