Gyakorlati alapok III.

Osztály csakis belsőleg (a belső osztály)

 

Ha a Javán belüli kódhierarchiára egy gyors pillantást vetünk, láthatjuk, hogy a rendszerben az osztályok nagyjából "középszinten", egymás mellett helyezkednek el (mert felettük létezik még egy kódrendszerező hierarchia, ez pedig a csomagok /package/ rendszere).

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A Javán belül azonban lehetőségünk van egy további osztály létrehozására egy, már meglévő osztályon belül. Ezt a további kódtagolási lehetőséget nevezzük belső osztálynak (nested class).

A belső osztályt úgy képzelhetjük el, mint egy 1 ajtós belső szobát, amelyet csakis a külsőből érhetünk el és amelyet ezért kívülről nem is láthatunk. Voltaképpen ez a belső osztály fő előnye: mivel kívülről nem látható, működése hasonlatos a private deklarálású osztályhoz, bár megismerésének, láthatóságának további gátját jelenti, hogy kódja ezért nem is a középszintű osztályhierarchiában foglal helyet, hanem belsőként az egyik osztályban, ezáltal pedig gyakorlatilag rejtve marad.

 

A belső osztályt tehát csakis az ő kódját tartalmazó külső osztály ismeri, illetve ez fordítva is igaz, következésképpen kölcsönösen felismerik egymás objektumait. Ezen "rejtőzködő" tulajdonsága miatt néhány szakkönyv óva int a belső osztályok túlzott használatától.

 

Az alábbi futtatható Java-példakódban egyszerű műveleteket láthatunk, de a helyzet bonyolultságához igazítva:

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Kulso {
    public void kiiras(Object object){
    System.out.println(object);
}

public static void main(String args[]) {
    Kulso kulso = new Kulso();
    Belso belso = new Belso();
    kulso.kiiras(belso.osszeadas(1,2));
    }
}

class Belso{
    public int osszeadas(int a, int b){
    return a + b;
    }
}

 

Végeredmény:

3

 

Utolsó gondolatként jegyzem meg, hogy ez a belső kódtagoltság még tovább fokozható többszörösen egymásba ágyazott osztályok, vagy éppen lokálisan (alblokkban) deklarált osztályok használatával.