# Abstrakte Klassen



## Hero (2. Jan 2012)

Hallo,
Ich soll eine Abstrakte Klasse erstellen und dort soll ich Felder von meinen anderen Klassen erstellen. Ich hab es so gemacht:


```
protected MyVector3D v2;
	 protected MyMatrix mat;
```

Dann sollte ich noch eine abstrakte Methode erstellen welches sich die Koordinaten der Objekte holt. Ich hab einfach folgenden Code hinzugefügt:


```
abstract protected Object getSimpleObjectPoints();
```

und in den anderen Klassen hab ich:

```
protected Object getSimpleObjectPoints() {
			
		return MyVector3D.this;
	}
```
 hinzugefügt.

Ich bin mir jetzt nicht ganz sicher ob richtig ist was ich da machen. Ich hoffe ihr könnt mir da weiter helfen.


----------



## SlaterB (2. Jan 2012)

du schreibst von abstrakter Klasse mit abstrakter Methode + in anderer Klasse Implementierung der abstrakten Methode,
das deutet auf zwei Klassen in Vererbungsbeziehung hin, aber diese beiden nennst du nicht?

hat bestimmt was mit MyMatrix und MyVector3D zu tun, aber die nennst du bisher nur als Attribut-Deklarationen,
poste doch erstmal die jeweiligen Klassen ganz?, welche ist überhaupt die abstrakte, welche die andere?
noch unbekannt


```
return MyVector3D.this;
```
klingt in jedem Falle komisch, was bezweckst du damit?
welche Funktion würde 

```
return this;
```
nicht genauso erfüllen? falls das andere überhaupt syntaktisch geht,

wenn du die Attribute v2 oder mat zurückgeben willst, dann musst du auch irgendwas mit v2 oder mat schreiben..


----------



## Hero (2. Jan 2012)

Das ist die Abstrakte Klasse, welche als Basis gilt:

```
abstract class MyObject3D {
	 
	  
	 protected MyVector3D v2;
	 protected MyMatrix mat;
	 
//Default-Konstruktor
	 MyObject3D (){}
	abstract protected Object getSimpleObjectPoints();
}
```

Das ist die Vektor Klasse

```
public class MyVector3D extends MyObject3D{

	
	// Koordinaten
	public double x;
	public double y;
	public double z;
	
	// Konstruktoren
	public MyVector3D() {
		this(0.0, 0.0, 0.0);
	}
	
	public MyVector3D(double x, double y, double z) {
		this.x = x;
		this.y = y;
		this.z = z;
	}

/* Ganz viele andere Methoden
...
...
...
*/

protected Object getSimpleObjectPoints() {
			
		return MyVector3D.this;
	}
}
```


```
public class MyMatrix extends MyObject3D{
	private double[][]  matrix;
	public  double[][]  ematrix;
	
	 MyMatrix(double[][] matrix) {this.matrix=matrix;}

/* Ganz viele andere Methoden
...
...
...
*/
protected Object getSimpleObjectPoints() {
			
		return MyVector3D.this;
	}
```

Die Main
	
	
	
	





```
public class MyMath  {
/* Ganz viele andere Methoden
...
...
...
*/
public static void main (String [] args){
		
		MyVector3D v1=new MyVector3D(4,2,6);
		System.out.println("Die Koordinaten von v1 sind: "+v1.getSimpleObjectPoints());
	}
```

Mit getSimpleObjectPoints() sollen wir die Koodinaten eines Vektors/Objekts liefern.


----------



## SlaterB (2. Jan 2012)

was war jetzt die Frage?

> return MyVector3D.this;
halte ich nach wie vor so sinnvoll wie 
> return Sonnenschein;

aber solange du nicht erklärst was du vorhast (jaja, Koordinaten)/ was der Code bedeuten soll/ wo irgendein Problem besteht, kann man nicht viel sagen

> Mit getSimpleObjectPoints() sollen wir die Koodinaten eines Vektors/Objekts liefern.
dann mache genau das, 
ob
> return MyVector3D.this;
das macht kann man doch beurteilen?

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

 >    protected MyVector3D v2;
 >    protected MyMatrix mat;
sehe ich auch kritisch, immer gilt die Frage:
was wäre wenn du diese beiden Zeilen entfernst, wird es besser/ schlechter/ warum?


----------

