|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysłany: Nie 2:29, 28 Sty 2007 Temat postu: |
|
|
@Skrobocik - nie.
Na przykład inne uprawnienia.
|
|
Powrót do góry |
|
|
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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 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
|
Wysł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 |
|
|
|
|
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
|