package oop.InnereKlassen;
/*
 * - wird nur innerhalb einer Methode, eines Konstruktors oder eines Blocks definiert
 * - Sie ist nur innerhalb des Umfangs sichtbar, in dem sie definiert ist.
 * - Wird typischerweise verwendet, um eine Klasse zu definieren, die nur in einer bestimmten Methode benötigt wird.
 * - lokale Schnittstellen (interfaces) sind nicht erlaubt
 * 
 */
public class LokaleInnereKlasse {

	 final int x = 2;
	 private final String nichtLokal = "ich bin nicht Lokal";
	 
	public static void main(String[] args) {
		// diese Klasse ist nur innerhalb der Main methode sichtbar
		class LokaleKlasse{
			public String toString(){
				return "ich bin Lokal22";
			}
		
		}
		
		LokaleKlasse lokal = new LokaleKlasse();
		System.out.println(lokal.toString());
		
		LokaleInnereKlasse test = new LokaleInnereKlasse();
		test.zweiteLokaleKlasse();
		
	}
	
	public void zweiteLokaleKlasse() {
		
		final String ausgabe = "Ich bin lokal in einer methode";
		
		class LokaleKlass2{
			private final String lokal = "Ich bin Lokal";
			
			public void print() {
                System.out.println(nichtLokal + " " +  ausgabe +  " "+ " " + lokal );
			}
			
		}
		
		LokaleKlass2 lokale2 = new LokaleKlass2();
		lokale2.print();
		
	}
}
