diff --git a/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Aufgabenblatt1Aufgabe4DreidimensionaleKoerper.java b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Aufgabenblatt1Aufgabe4DreidimensionaleKoerper.java
new file mode 100644
index 0000000000000000000000000000000000000000..486b4cbf82e7ad3c8fd622070edb52f361c2d7ce
--- /dev/null
+++ b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Aufgabenblatt1Aufgabe4DreidimensionaleKoerper.java
@@ -0,0 +1,41 @@
+public class Aufgabenblatt1Aufgabe4DreidimensionaleKoerper {
+
+    public static void main(String[] args) {
+        
+        // Test Klassenhierarchie
+        // - erstelle zwei unterschiedliche Typen von Koerpern
+        // - Test der Funktionalität
+        
+        Koerper[] koerper = new Koerper[2];
+        
+        koerper[0] = new Kugel( 0, 0, 0, 2 );
+        koerper[1] = new Quader( 0, 0, 0, 2, 2, 2 );
+        
+        for ( int i = 0; i < koerper.length; i++ ) {
+            System.out.println("----- Neuer Koerper -----\n");
+
+            // Beschaffenheit des Koerpers nach Erstellung
+            koerper[i].getMetaDaten();
+            System.out.println("");
+
+            // Veraenderung des Koerpers
+            System.out.println("Verändere Körper mit Farbe = gruen, verschiebe horizontal und vertikal um 2 und skaliere um 1.");
+            
+            koerper[i].setFarbe("gruen");
+            koerper[i].verschiebeHorizontal(2);
+            koerper[i].verschiebeVertikal(2);
+            koerper[i].skaliere(1);
+           
+            System.out.println("");
+            
+            // Beschaffenheit des Koerpers nach Veraenderungen
+            koerper[i].getMetaDaten();
+            System.out.println("");
+
+            // Test ob ein bestimmter Punkt innerhalb des Koerpers liegt oder nicht
+            System.out.println("P(1,4,4) befindet sich im Koerper: " + koerper[i].istImKoerper(1, 4 , 4));
+            
+            System.out.println("\n----- Koerper Ende -----\n");
+        }
+    }
+}
\ No newline at end of file
diff --git a/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Koerper.java b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Koerper.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a1c63427eb549a7bcc864a45810b01e6d0fe952
--- /dev/null
+++ b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Koerper.java
@@ -0,0 +1,101 @@
+public abstract class Koerper {
+   
+    //      . z
+    //      .
+    //      .
+    //      .
+    //      . 
+    //      .
+    //      .  +>>>>>>>>>>>>+ 
+    //      +./|.........../| y
+    //     . +<<<<<<<<<<<<+ |
+    //    . c| +>>>>>>>>>>|>+
+    //   .   |/ a         |/
+    //  .    +<<<<<<<<<<<<+
+    // . x           b
+
+    
+    private double x;
+    private double y;
+    private double z;
+    
+    private String farbe = "black";
+    
+    public Koerper( double x, double y, double z ) {
+        this.x = x;
+        this.y = y;        
+        this.z = z;
+    }
+    
+    // abstract methods
+    public abstract double berechneOberflaeche();
+    
+    public abstract double berechneVolumen();
+    
+    public abstract String getParameter();
+    
+    public abstract void skaliere(double alpha);
+    
+    public abstract boolean istImKoerper( double x, double y, double z );
+    
+    // final methods    
+    public final String istEin() {
+        if( this instanceof Quader ) {
+            return "Quader";
+        } else {
+            return "Kugel";
+        }
+    }
+    
+    public final void verschiebeHorizontal(double schritte) {
+        this.y = this.y + schritte;
+    }
+    
+    public final void verschiebeVertikal(double schritte) {
+        this.z = this.z + schritte;
+    }
+    
+    public final void verschiebeTiefe(double schritte) {
+        this.x = this.x + schritte;
+    }
+    
+    public final void setzeNeuePostion( double x, double y, double z ) {
+        this.x = x;
+        this.y = y;
+        this.z = z;
+    }
+    
+    // public methods
+    public void setFarbe(String farbe) {
+        this.farbe = farbe;
+    }
+    
+    public String getFarbe() {
+        return this.farbe;        
+    }
+    
+    public String getPosition() {
+        return "x-Koordinate " + this.x + " y-Koordinate " + this.y + " z-Koordinate " + this.z;
+    }
+            
+    public void getMetaDaten() {
+        System.out.println("Art: " + this.istEin());
+        System.out.println("Lage: " + this.getPosition());
+        System.out.println("Parameter: " + this.getParameter());
+        System.out.println("Volumen: " + this.berechneVolumen());
+        System.out.println("Oberfläche: " + this.berechneOberflaeche());
+        System.out.println("Farbe: " + this.getFarbe());
+    }
+    
+    public double getX() {
+        return this.x;
+    }
+    
+    public double getY() {
+        return this.y;
+    }
+    
+    public double getZ() {
+        return this.z;
+    }
+}
\ No newline at end of file
diff --git a/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Kugel.java b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Kugel.java
new file mode 100644
index 0000000000000000000000000000000000000000..34b63263c506cbdea58495432d476f88dac6e9aa
--- /dev/null
+++ b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Kugel.java
@@ -0,0 +1,34 @@
+public class Kugel extends Koerper {
+    
+    private double radius;
+    
+    public Kugel( double x, double y, double z, double radius ) {
+        super(x, y, z);
+        
+        this.radius = radius;
+    }
+
+    public double berechneOberflaeche() {
+        return 4 * Math.PI * Math.pow(radius, 2);
+    }
+
+    public double berechneVolumen() {
+        return (4 * Math.PI * Math.pow(radius, 3))/3;
+    }
+    
+    public String getParameter() {
+        return this.istEin() + " mit dem Radius " + radius;
+    }
+
+    public boolean istImKoerper( double x, double y, double z ) {
+        if ( (Math.pow(x, 2)  +  Math.pow(y, 2)  + Math.pow(z, 2))  <=  Math.pow(radius, 2) ) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public void skaliere(double alpha) {
+        radius = radius + alpha;
+    }
+}
\ No newline at end of file
diff --git a/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Quader.java b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Quader.java
new file mode 100644
index 0000000000000000000000000000000000000000..a40452b3ca444be467bbb3befcb68eb8b55bfb27
--- /dev/null
+++ b/Aufgabenblatt_1-Aufgabe_4-dreidimensionale_Koerper/src/Quader.java
@@ -0,0 +1,45 @@
+public class Quader extends Koerper {
+    
+    private double a;
+    private double b;
+    private double c;
+    
+    public Quader( double x, double y, double z, double a, double b, double c ) {
+        super(x, y, z);
+        
+        this.a = a;
+        this.b = b;
+        this.c = c;
+    }
+    
+    public double berechneOberflaeche() {
+        return 2 * a * b + 2 * a * c + 2 * b * c;
+    }
+
+    public double berechneVolumen() {
+        return a * b * c;
+    }
+    
+    public String getParameter() {
+        return this.istEin() + " mit den Maßen " + this.a + " x " + this.b + " x " + this.c ;
+    }
+
+    // TODO: implement the right 	algorithm to check that a point is inside a square
+    public boolean istImKoerper( double x, double y, double z ) {
+        if (  (x <= this.getX() + a) || (x >= this.getX() + a) ) {
+            return false;
+        } else if (  (y <= this.getY() + b) || (y >= this.getY() + b) ) {
+            return false;
+        } else if (  (z <= this.getZ() + c) || (z >= this.getZ() + c) ) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    public void skaliere(double alpha) {
+        a = a + alpha;
+        b = b + alpha;
+        c = c + alpha;
+    }
+}
\ No newline at end of file