Wielkimi krokami zbliżam się do końca podręcznika. Jakoś nie czuję się o wiele mądrzejszy, ale to głupie odczucie i próbuję z nim walczyć. W końcu coś z tej wiedzy w głowie zostaje – im więcej w sumie tym lepiej – SCJP jednak tych kilka setek kosztuje. Lepiej nie podchodzić dwa razy.
Dziś na tapecie krótki rozdzialik o klasach wewnętrznych. Przyznam szczerze, że popełniłem w teście raptem 2 błędy zatem i pisać nie za bardzo mam o czym. Sam bowiem rozdział poświęcony temu zagadnieniu ma może 20 stron – naprawdę nie za wiele można na tylu stronach zmieścić. Jednakże oto lista:
- dostęp – zasadniczo właśnie dostępności/widoczności poszczególnych klas czy metod dotyczy większość pytań. Tutaj napiszę tylko, że w przypadku method-local inner class ma ona nielimitowany dostęp do klasy otaczającej. Taki kod:
public class Tester {
final String lancuch = new String("Chlebik");
public void pokazKlaseWewnetrzna()
{
class takaSobieKlasa {
void hej()
{
System.out.println( lancuch );
}
}
}
}
jest jak najbardziej w porządku i zadziała bez problemu. - pamiętaj o statykach – zarówno o tym, że metody niestatyczne nie mogą być wywoływane ze statycznych metod, a także, że statyczne zmienne trzymają się twardo i mają za nic tworzenie instancji klasy.
- widoczność klas wewnętrznych – kod z pytania testowego:
class A { void m() { System.out.println("outer"); } }
public class TestInners {
public static void main(String[] args) {
new TestInners().go();
}
void go() {
new A().m();
class A { void m() { System.out.println("inner"); } }
}
class A { void m() { System.out.println("middle"); } }
}
Pytanie brzmi – co zostanie wyświetlone na wyjściu programu? Odpowiedź: middle. Dlaczego? Ano bo klasa wewnątrz metody jest zadeklarowana dopiero po wywołaniu (czyli po fragmencie new A().m();, w związku z czym jest niewidoczna. Klasa A, która jest w pierwszej linijce kodu jest “poziom wyżej” niż klasa dająca na wyjściu “middle” i dlatego też nie zostanie wykorzystana.
Taka mała uwaga – skąd pomysł na final String lancuch = new String(“Chlebik”);? Wystarczy final String lancuch = “Chlebik”.
komentarz - autor: Jacek Laskowski — czerwiec 21, 2009 @ 11:57 pm
Po przygodzie z Groovym staram sie pisac wszedzie dluuuuuzsze formy :) Ale fakt, mozna i w ten sposob.
komentarz - autor: chlebik — czerwiec 22, 2009 @ 12:10 am