package oop.Abstraction;

 public abstract class Abstraction {
	
	/*Was ist abstraction:Das Verbergen der internen Implementierung der (Methode, Funktion) 
	 * und das Zeigen nur der Funktionalität für die Benutzer.
	 * 
	 * 
	 * wie errecihen wir die Abstraktion?
	 * 
	 *  1. Abstract Class => not fully Abstraction 
	 *  2. Interface => fully Abstraction 
	 *  
	 * -----------------------------------------
	 * 
	 * Die abstrakte Klasse:
	 * 
	 * Deklaration als abstract: Eine abstrakte Klasse muss mit dem Schlüsselwort abstract deklariert werden
	 * abstrakte Klassen in Java müssen vererbt werden, damit ihre abstrakten Methoden implementiert werden können
	 * Da abstrakte Klassen nicht instanziiert werden können (man kann also keine Objekte direkt von ihnen erstellen)
	 * Die Abstrakte klasse kann eine Abstrakte methode haben aber soll nicht 
	 * Die Abstrakte klasse können final methods haben
	 * Die Abstrakte klasse können constructors und static methods haben
	 * Setter und getter sind gültig	
	 * 
	 * - Die Unterklasse:
	 * 		die nicht abstrakte Unterklassen muss alle abstrakte methoden implementieren!
	 * 		die abstrakte Unterklassen muss nicht  alle abstrakte methoden implementieren! 
	 *----------------------------------------
	 *
	 *Die abstrakte Methode:
	 *warum Abstrakte Methods? damit jede Unterklasse diese Methoden implementiert
	 *wenn wir eine abstrakte Methode erzeugen, soll ihre Klasse auch Abstrakt sein.
	 *Abstrakte Methoden können von der abstrakten Klasse nicht implemntiert werden.
	 *Abstrakte Methoden können nur von Unterklassen mit @Override implementiert werden.
	 *Abstrakte Methoden können ohne und mit Rückabe wert sein.
	 *Statiche und private Methodes können nicht abstrakt sein warum?
	 *weil satatic und private gehören nur der Klasse
	 */
	
	  protected abstract void fahre();
	  public abstract int count();


}
