# Gutes Beispiel für Vererbung?



## Sued_Faust (26. Dez 2006)

Moin erst mal!!!!

hab ma ne Frage und zwar schreiub ich gerade ein wirklich ganz kleines prog um in einer dokumentation die vererbung zu verdeutlichen und ich wollt euch fragen ob das von mir gewählte bsp ein gutes ist verbesserungsvorschläge sind erlaubt.


```
package vererbung;

public class Ausgabe {

public Ausgabe(){
	
}

public static void main(String args[]) {
	Grafik g1 = new Grafik();
	Kreis k1 = new Kreis();
	
	double gr = g1.getRadius();
	
	double ku = k1.BerechneUmfang();
	
	System.out.println("Start-Radius: " + gr);
	System.out.println("Umfag-Kreis: " + ku);
}
}
```

------------------------


```
package vererbung;

public class Grafik {
	
	protected double radius;
	//protected double x;
	//protected double y;
	//protected double z;
	
	public Grafik(){
		radius = 1.0;
		//x = 1.0;
		//y = 1.0;
		//z = 1.0;
		
	}
	
	protected double getRadius(){
		return radius;
	}
	
	//protected double BerechnungUmfang(){}
	
	//protected double Linie(){}
	
	//protected double Rechteck(){}
	
	
}
```

--------------------------


```
package vererbung;

public class Kreis extends Grafik{
	double r = radius;
	double u;
	
	public Kreis(){
	}
	
	public double BerechneUmfang(){
		u = 2 * r * 3.14;
		
		return u;
	}
	
}
```

Ich danke ienfcah schon mal im vorraus

mfg Patrick


----------



## Beni (26. Dez 2006)

Das Beispiel ist seltsam. Wieso besitzt "Grafik" ein Attribut "radius"?
Eine Grafik ist *kein* Kreis; ein Kreis ist eine Grafik. Oder was sollte z.B. eine Klasse "Rechteck", die von Grafik erbt, mit "radius" machen?

Oder anders gesagt, eine Klasse macht nur Sinn, wenn sie neue Funktionen einführt. "Grafik" führt aber nichts ein (ausser diesem fragwürdigen radius), ist also derzeit ziemlich überflüssig.


----------



## Sued_Faust (26. Dez 2006)

Stimmt du hast recht wenn ich mir das jetzt noch ma anschau ist das sehr seltsam . aber erlich hab ich nicht so ne gute idee um die vererbung in kleinen Maßstäben zu zeigen. Ohne irgendwelche tiere oder so zu benutzen sollte schon etwas "reales" sein. hätte von euch einer ne idee?

mfg und danke für die erste antwort


----------



## Roar (26. Dez 2006)

interessante frage, ob tiere weniger real sind als kreise


----------



## André Uhres (26. Dez 2006)

Erstens frag ich mich warum du in Kreis eine neue Variable r einführst
und nicht direkt das ererbte Attribut "radius" nimmst.
Zweitens, da "radius" eh nicht zu "Grafik" passt sondern eher zu Kreis,
würde ich mir einfach passendere Grafikattribute ausdenken, wie "farbe",  "strichStaerke" oder "hintergrundFarbe".


----------



## Sued_Faust (26. Dez 2006)

naja sry war so nicht gemeint, mnit real war eher gemeint das ein solches beispiel wie die vererbung von rechteck und polygon eine realeres beispiel in der programmerstellung ist als irgendwelche tiere zu vererben...

mfg


----------



## Sued_Faust (26. Dez 2006)

@ anré ja da hast du recht das ist ne idee  danke schon mal 

mfg


----------



## abollm (26. Dez 2006)

roar hat Recht mit seiner "Frage", ob Tiere weniger real sind als Kreise.

Versuch doch einfach dein gewähltes Beispiel mit den Grafiken konsequent aufzubauen, z.B.:

Also deine Basisklasse ist "Grafik" oder "Form". Dies Klasse besitzt bestimmte Basismethoden, wie z.B. "getColor()", "setColor", "setRadius()", "draw()", "move()" etc. sowie bestimmte Eigenschaften ("length", "radius", "color", position").

Jede Form kann folglich z.B. erzeugt/gezeichnet -> "draw()"  etc. werden.

Von dieser Basisklasse (~form) werden bestimmte neue Typen von Formen abgeleitet/vererbt, also z.B. Kreis, Rechteck, Dreieck, Fünfeck etc.Alle diese abgeleiteten Klassen können bestimmte zusätzliche Eigenschaften neben den vererbten aufweisen.

Ist doch einfach, oder?


----------



## mephi (26. Dez 2006)

abollm hat gesagt.:
			
		

> r
> Also deine Basisklasse ist "Grafik" oder "Form". Dies Klasse besitzt bestimmte Basismethoden, wie z.B. "getColor()", "setColor", "setRadius()", "draw()", "move()" etc. sowie bestimmte Eigenschaften ("length", "radius", "color", position").




wieso soll Grafik setRadius(), length und radius haben?


also ich würde "grafik" als interface machen. es gibt ja eigentlich keine "figur" die nur grafik ist.


----------



## abollm (26. Dez 2006)

mephi hat gesagt.:
			
		

> abollm hat gesagt.:
> 
> 
> 
> ...



Ach Mensch, so sei doch nicht so pedantisch. Das war ein schnell hingehacktes Beispiel, ohne groß nachzudenken. Natürlich wäre bei einer Basisklasse Grafik oder Form das Attribut "radius" nicht unbedingt sinnvoll, besser wären "perimeter" und "area", weil das jede Form aufweisen muss. Das Attribut "radius"  ist dagegen besser bei der abgeleiteten Klasse Kreis aufgehoben.

Zufrieden?


----------



## mephi (26. Dez 2006)

es ging ja darum ein gutes beispiel zu finden


----------



## abollm (26. Dez 2006)

mephi hat gesagt.:
			
		

> es ging ja darum ein gutes beispiel zu finden



Klar, und außerdem muss man ja dem OP noch etwas zum Nachdenken mit auf den Weg geben. ;-)


----------



## Sued_Faust (26. Dez 2006)

Hab mich jetzt doch bisl anders entscheiden und hoffe nnoch mal auf eine meinung von euch 


```
package vererbung;



public abstract class Figur {
	protected double radius = 1;
	   public abstract double BerechneUmfang();
	}
```


```
package vererbung;



public class Kreis extends Figur {
	
	private double umfang;
	
	   public double BerechneUmfang() {
		   umfang = 2 * radius * Math.PI;
			return umfang;
	    }
}
```


```
package vererbung;

public class Ausgabe {
	  public static void main(String[] args) {
		double umfang;  
	    Figur k = new Kreis();
	    umfang = k.BerechneUmfang(); // hier wird nun die Methode von Kreis aufgerufen
	    
	    System.out.println("Umfang = " + umfang );
	    
	  
}
```


----------



## mephi (26. Dez 2006)

versteh immer noch nicht warum du in der klase figur sowas wie radius drin hast..
deine figut hat doch garkein radius.

wenn du eine abstrakte klasse tier hast und dann eine klasse elefant die von tier erbt, dann hat die klasse elefant ein rüssel und nicht die klasse tier


----------



## Sued_Faust (27. Dez 2006)

jo hast recht habs verbessert  danke schon ma dafür aber sonst ginge das beispiel doch oder?

mfg


----------

