/* B E S C H R E I B U N G
Klassen:
  Kuh, Henne

Abstrakte Klasse:
  Nutztier
  Es gibt in der realen Welt kein Tier, das ein allgemeines, unspezifiziertes
  Nutztier ist, sondern nur spezielle Unterarten von Nutztieren, z.B. eine Kuh
  oder eine Henne.
  Es macht also keinen Sinn, ein Exemplar der Klasse "Nutztier" zu bilden.
  Dies realisiert man mit einer abstrakten Klasse, wie z.B. der Klasse
  "Nutztier" (will man davon ein Exemplar erzeugen, ergibt dies einen
  Compilerfehler.
  Eine abstrakte Methode in der Oberklasse, wie z.B. "tierMarktwert()"
  definiert lediglich den Methodenkopf und drückt damit aus, daß die
  Oberklasse keine Ahnung von der Implemetierung hat und die jeweilige
  Unterklasse sich darum kümmern muss.
  Dies macht in der Methode tierMarktwert() auch Sinn, da der Tiermarktwert
  von der Leistungsfähigkeit (z.B. Legeleistung, MilchLeistung) eines Tiers
  abhängt und von den Attributen "legeleistung" und "milchleistung" nur die
  jeweilige Unterklasse etwas weiss, aber die Oberklasse keine Ahnung davon hat.

Vererbung:
  Nutztier ist Oberklasse von Kuh und Henne.
*/

public class MainAbstract1{
    public static void main(String[] args){
    	double w1, w2, w3, w4;
    	Kuh myk=new Kuh("Elsa", 10);
    	Henne myh=new Henne ("Frida", 1);
    	w1=myk.getTierwert();
    	w2=myh.getTierwert();
    	w3=myk.getGewinn();    	
    	w4=myh.getGewinn();
    	
    	System.out.println("Wert der Kuh= "+w1);
    	System.out.println("Wert der Henne= "+w2);
    	System.out.println("Gewinn an der Kuh= "+w3);    	
    	System.out.println("Gewinn an der Henne= "+w4);    	
    }
}

abstract class Nutztier{
	// Name des Tiers
	private String name;
	
	public Nutztier(String pname){
		name = pname;
	}

	abstract public double getTierwert();
	
	public double getGewinn(){
		return(0.1*getTierwert());
	}
}

class Kuh extends Nutztier{
    private double milchLeistung;
    public Kuh(String pName, double pMilchLeistung){
    	super(pName);
    	milchLeistung =pMilchLeistung; 
    }

    public double getTierwert(){
      return(100 * milchLeistung);
    }
    
} 


class Henne extends Nutztier{
    private double legeLeistung;
    public Henne(String pName, double pLegeLeistung){
    	super(pName);
    	legeLeistung =pLegeLeistung; 
    }

    public double getTierwert(){
      return(2 * legeLeistung);
    }
}
