package oop.InnereKlassen;
/*
 * - heißt auch (member class)
 * - zählt auch als Attribut
 * - kann auf alle Elemente der äußere Klasse zugreifen,die auch (private sind)
 * - um ein Objekt der Hauptspeicher zu erzeugen, soll Objekt Computer erst erzeugt werden
 * - unterschied zu statischen, da statischen ohne Objekt der äußere klassen sein können
 * - nicht-statische-innere klassen dürfen keine statische Elemente definieren
 * - sind wichtig für kompositionen 
 */

public class NichtStatischeInnereKlasse {
	
	 public class Computer{
		// String static user = "obai"; verboten
		String hersteller = "HP";
		Hauptspeicher speicher = new Hauptspeicher();
		// ist verboten 
		public static void print() {
			System.out.println("hallo");
		}
		
		class  Hauptspeicher{
			int groesse = 1024;
			
			public String gethersteller() {
				//Zugriff auf das Attribut 'hersteller' der äußeren Klasse 'Computer'
				return hersteller;
			}
			
		
		}
		
	}
	 
	 public static void main(String[] args) {
	 NichtStatischeInnereKlasse n1 = new NichtStatischeInnereKlasse();
	 
	 NichtStatischeInnereKlasse.Computer c1 = n1.new Computer();
	 Computer.Hauptspeicher h1= c1.new Hauptspeicher();
	 System.out.println(h1.gethersteller() + " " + h1.groesse);
	 c1.print();
	 }

}
