Java: sisäiset, paikalliset ja nimeämättömät luokat

Sisäinen luokka (inner class) on luokka jonkin toisen luokan sisällä. Sisäisen luokan metodit ja muuttujat ovat tällöin suojattu ulkopuoliselta käytöltä mutta ne ovat kuitenkin oman ulkoisen luokkansa käytössä. Ulkoisessa luokassa on luotava olio sisäisestä luokasta jotta sen metodeihin päästään kiinni.

// UlkoinenLuokka
// Luokka toteutetaan muuten normaalisti,
// paitsi, että sen sisään rakennetaan luokka
// SisainenLuokka.

// Vaikka sisäisen luokan metodit olisivat 'private'
// pystyisimme niitä käyttämään ulkoisesta luokasta
 
// Ulkoisesta luokasta voitaisiin luoda olio perinteisellä tavalla
// UlkoinenLuokka sisaisetLuokat = new UlkoinenLuokka(alkuarvo);

public class UlkoinenLuokka {
	private SisainenLuokka s;
	private int arvo;
	
	public UlkoinenLuokka(int arvo) {
		this.arvo = arvo;
		s = new SisainenLuokka();

	}
	
	public int kertoma() {
		return s.laskeKertoma(this.arvo);
	}
	public int lisaa(int x) {
		return s.laskeLisays(x, this.arvo);
	}
	public int getArvo() {
		return this.arvo;
	}
	
	/* Luodaan SisainenLuokka UlkoisenLuokan sisälle
	 * SisaisenLuokan metodit on suojattu kaikilta muilta
	 * paitsi luokalta UlkoinenLuokka
	 */
	class SisainenLuokka {
		int laskeKertoma(int x) {
			if(x > 0) {
				for(int i = x; i > 0; i++) {
					x = x * i;
				}
			}
			return x;	
		}
		int laskeLisays(int x, int arvo) {
			return x + arvo;
		}
		
	}
}

Paikallisen luokan voi tehdä vaikka tietyn metodin tai silmukan sisään ja anonyymiä luokkaa voi käyttää tilanteisiin jossa luokkaa tarvitaan ainoastaan kerran.

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s