package oop.Interface;

public class Interface {
	
	/*Was ist das?
	 * 	Eigentlich ist das fast wie die Abstrakte klassen außer:
	 * 
	 *  Implementierung Mehrfachvererbung  
	 *  abstrakte Klasse
	 *  
	 *  public interface klasseName  
	 *  alle Attribute werden automatisch (public static final)
	 * 	fast alle methoden werden automatisch (public abstract)
	 *  	,außer die default methoden, die sollen aber in unterkalsse mit dem Wort public (soll geschrieben werden) implementiert werden und die können überschrieben werden
	 *  Interface kann auch statiche methoden haben, die implementiert werden sollen 
	 *  default methoden sind nur in Interface erlaubt!
	 *  final methoden sind nicht erlaubt, da sie abstrake sind und sollen überschreiben werden!
	 *  private methoden sind erlaubt aber nur in der selben Klasse!
	 * 	Interface kann keinen Konstruktor haben!
	 *  die untereklasse soll alle methode der Interface klasse implementieren
	 * 
	 * 
	 * NestedInterface: 
	 * public interface NestedInterface {
		void test();
	
		interface InnerInterface  {
			default void test2() {
				System.out.print("Innerinterface");
		}
	}
		
	implements wid durch NestedInterface.InnerInterface
	
	 *Functional Interface:
	 *  @FunctionalInterface
	  public  interface Test2{
		   int berechne(int a, int b);
		  
	  }
	 * @FunctionalInterface dieses Interfaceklasse kann nur
	 *   (eine abstratke) methode haben aber unendlich viele
	 *   default,static und private methoden haben
	 *   
	 * Marker or Tagging Interface:
	 *   ist ein Interface in Java, das keine Methoden oder Konstanten deklarier
	 *    
	 *    
	 *    
	 * wichtig: 
	 * 	. eine unterekalsse extends eine Obereklasse
	 * 	. eine normale oder final Klasse kann implements eine interface klasse
	 *  . eine interface klasse extends eine interface klasse
	 * 
	 * welche java types kann interface implementieren?
	 *  1. klassen
	 *  2. abstrakte klassen
	 *  3. nested Klassen (Verschateten klassen)
	 *  4. Enum
	 *  5. dynamic proxy
	 */

}
