diff --git a/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2 b/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2
index d8c7c88068a42e3eedc0abf8d41fb4e839e4da6d..900a19fea236e2dfc217b5fa5c02fb44ff3f685f 100644
Binary files a/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2 and b/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/.vs/prog2-ss2020-wienkop/v16/.suo b/.vs/prog2-ss2020-wienkop/v16/.suo
index 3d6b5bc4363f4fd7c162f872adfc1c6c4f02b0a9..7cd551f2906dc682cd77f4938f33a274506d2f83 100644
Binary files a/.vs/prog2-ss2020-wienkop/v16/.suo and b/.vs/prog2-ss2020-wienkop/v16/.suo differ
diff --git a/02VerketteteListe-2/Program.cs b/02VerketteteListe-2/Program.cs
index 6dbaa4fe5c465c28f2dd61e58c8b8fa7eb2856d5..b734d9d128c44f802770a5c83881664dac7352ee 100644
--- a/02VerketteteListe-2/Program.cs
+++ b/02VerketteteListe-2/Program.cs
@@ -125,12 +125,12 @@ namespace _02VerketteteListe_2
                                             // an der gespeicherten Pos. weitergemacht.
             }
         }
-        public IEnumerable Iterate(int offset=0)
+        public IEnumerable Iterate(int offset = 0)
         {
             Element item = anf;
             for (int i = 0; i < offset; i++)
                 item = item.next;
-            while( item != null)
+            while (item != null)
             {
                 yield return item.name;
                 item = item.next;
@@ -193,7 +193,7 @@ namespace _02VerketteteListe_2
             else
             {
                 Element vorletzter = anf;
-                for (int i = 0; i < index-1; i++)  // Liste bis zum n-1-ten Element durchlaufen
+                for (int i = 0; i < index - 1; i++)  // Liste bis zum n-1-ten Element durchlaufen
                     vorletzter = vorletzter.next;
                 vorletzter.next = vorletzter.next.next;
                 anz--;
@@ -246,6 +246,13 @@ namespace _02VerketteteListe_2
             get => NthElem(index).name;
             set { NthElem(index).name = value; }
         }
+        public StringListe Reverse() // DIES IST NICHT DIE LÖSUNG FÜR DIE PRAKTIKUMSAUFGABE!!!
+        {
+            StringListe neueListe = new StringListe();
+            for (Element item = anf; item != null; item = item.next)
+                neueListe.AddFront(item.name);
+            return neueListe;
+        }
     }
     class Program
     {
@@ -260,6 +267,11 @@ namespace _02VerketteteListe_2
             l1.AddSorted("Claudia");
             l1.AddSorted("Dieter");
             l1.Print();
+            l1 = l1.Reverse();
+            Console.WriteLine("==================");
+            l1.Print();
+            Console.WriteLine("==================");
+
             Console.WriteLine(l1[3]);
             Console.WriteLine("==================");
             //l1.DeleteFirst();
diff --git a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll
index f82246a4263adcdb6554af4cfc6f4b20b3597a4b..bf3b90464188fdb37231ccae871fdf7900be8722 100644
Binary files a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll and b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll differ
diff --git a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb
index d44804dc685170134f1f5c67cd5d428081473ed4..293fc5255bcee75596e514008d4f3e1658626ae1 100644
Binary files a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb and b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb differ
diff --git a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache
index 308f84f1bd32b1f7e1467356eb1ac40d7da08d5e..4824caf0c92344f68eac696e04da28b425072d2c 100644
Binary files a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache and b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache differ
diff --git a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll
index f82246a4263adcdb6554af4cfc6f4b20b3597a4b..bf3b90464188fdb37231ccae871fdf7900be8722 100644
Binary files a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll and b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll differ
diff --git a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb
index d44804dc685170134f1f5c67cd5d428081473ed4..293fc5255bcee75596e514008d4f3e1658626ae1 100644
Binary files a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb and b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb differ
diff --git a/03VererbungKfzIntro/Program.cs b/03VererbungKfzIntro/Program.cs
index 0a92bbe72ca22a51096fb512fa6c572cbc3945ce..397ce6a884d94ac37a4e12b465fd94d431f7e0b8 100644
--- a/03VererbungKfzIntro/Program.cs
+++ b/03VererbungKfzIntro/Program.cs
@@ -33,51 +33,123 @@ namespace _03VererbungKfzIntro
     //Der Höchstsatz für die günstigste Lkw-Steuerklasse beträgt 556,00 Euro
     class Kfz
     {
-
+        string kennzeichen;
+        public Kfz(string kennzeichen) { this.kennzeichen = kennzeichen; }
+        public virtual void Ausgeben() { Console.Write($"{kennzeichen}:  "); }
+        public virtual double SteuernBerechnen() { return -999; }
+        // virtual ~ 
+        //   1. Methodenauswahl auf Basis des DYNAMISCHEN Objekttyps (z.B. Pkw.SteuernBerechnen() )
+        //   2. Diese Methode KANN in der abgeleiteten Klasse überschrieben werden; muss aber nicht!
+        //   Beispiel für virtual: public virtual string ToString() { return "namespacename.klassenname"; }
+        // abstract ~
+        //   1. wie oben
+        //   2. Diese Methode MUSS in der abgeleiteten Klasse überschrieben werden
+        //   3. Von einer abstrakten Klasse können keine Objekte angelegt werden
     }
     class Pkw : Kfz     // Vererbung, Spezialisierung, ist-ein Beziehung
     {
         int hubraum, CO2;
         public enum BenzinDiesel { Benzin, Diesel };
         BenzinDiesel typ;
+        public Pkw(string kennzeichen, int hubraum, int CO2, BenzinDiesel typ) : base(kennzeichen)
+        {
+            this.hubraum = hubraum;
+            this.CO2 = CO2;
+            this.typ = typ;
+        }
+        public override double SteuernBerechnen()
+        {
+            if (typ == BenzinDiesel.Benzin)
+                return 2.0 * (hubraum + 99) / 100;
+            else
+                return 9.5 * (hubraum + 99) / 100;
+        }
+        public override void Ausgeben()
+        {
+            base.Ausgeben();
+            Console.WriteLine($"{typ}, Hubraum: {hubraum}");
+        }
     }
     class Motorrad : Kfz
     {
         int hubraum;
+        public Motorrad(string kennzeichen, int hubraum) : base(kennzeichen)
+        {
+            this.hubraum = hubraum;
+        }
+        public override double SteuernBerechnen() => 1.84 * (hubraum + 24) / 25;
     }
-    class LKW : Kfz { }
-    class Elektroroller : Kfz { }
+    class LKW : Kfz
+    {
+        int hubraum, gewicht;
+        public LKW(string kennzeichen, int hubraum, int gewicht) : base(kennzeichen)
+        {
+            this.hubraum = hubraum;
+            this.gewicht = gewicht;
+        }
+        public override double SteuernBerechnen() => 1000;
+    }
+    //class Elektroroller : Kfz { }
     class Program
     {
         static void Main(string[] args)
         {
+            #region Alte Vorgehensweise
             //Pkw[] autos = new Pkw[1000];
             //Motorrad[] motorraeder = new Motorrad[1000];
             //LKW[] lastwagen = new LKW[1000];
             //Elektroroller[]
-            Kfz[] fahrzeuge = new Kfz[1000];
-            int menueauswahl = 1, FzAnzahl = 0;
+            #endregion
+            Kfz[] fahrzeuge = new Kfz[4];
+            // Statischer Typ ~ Der angegebene Datentyp; hier Kfz
+            // Der dynamische Typ ist der beim new() angegebene Typ
+
+            #region Alte Vorgehensweise
+            //int menueauswahl = 1, FzAnzahl = 0;
             //if (menueauswahl == 1)
             //    autos[autoanzahl] = new Pkw();
             //else if (menueauswahl == 2)
             //    motorraeder[motorradanzahl] = new Motorrad();
             //else if (menueauswahl == 3)
             //    lastwagen[lkwanzahl] = new LKW();
-            if (menueauswahl == 1)
-                fahrzeuge[FzAnzahl] = new Pkw();
-            else if (menueauswahl == 2)
-                fahrzeuge[FzAnzahl] = new Motorrad();
-            else if (menueauswahl == 3)
-                fahrzeuge[FzAnzahl] = new LKW();
+            #endregion
 
-            for (int i = 0; i < autoanzahl; i++)
-            {
-                autos[i].SteuernBerechnen();
-            }
-            for (int i = 0; i < motorradanzahl; i++)
+            fahrzeuge[0] = new Pkw("N-XY 567", 1598, 148, Pkw.BenzinDiesel.Diesel);
+            fahrzeuge[1] = new Motorrad("ER-KW 123", 250);
+            fahrzeuge[2] = new LKW("FÜ-KL 987", 4598, 3500);
+            fahrzeuge[3] = new Kfz("N-AB 123");
+
+            #region Gemeinsames Feld, aber mit lästiger Typprüfung und Verzweigung
+            // Der statische Typ zwingt zu einer Überprüfung des Typs, einem cast zum 
+            // spezifischen Typ (z.B. PKW) und erst dann kann die spezifische Steuern-Methode aufgerufen werden
+            //for (int i = 0; i < fahrzeuge.Length; i++)
+            //{
+            //    if (fahrzeuge[i] is Pkw)
+            //        Console.WriteLine(((Pkw)fahrzeuge[i]).SteuernBerechnen());
+            //    else if (fahrzeuge[i] is Motorrad)
+            //        Console.WriteLine(((Motorrad)fahrzeuge[i]).SteuernBerechnen());
+            //
+            #endregion
+
+            for (int i = 0; i < fahrzeuge.Length; i++)
             {
-                motorraeder[i].SteuernBerechnen();
+                Console.WriteLine(fahrzeuge[i].SteuernBerechnen());
+                // Methodenauswahl findet "normalerweise" auf Basis des STATISCHEN TYPS statt!
+                // virtual und abstract ermöglichen, die gemäß des DYNAMISCHEN TYPS gespeicherte Methode
+                // automatisch aufzurufen - ohne dass eine Typüberprüfung, ein cast oder eine if-Auswahl
+                // erfolgen muss. Weitere/spätere Klassen werden einfach in dieses Verfahren durch
+                // Erben von Kfz "eingeklinkt"!
             }
+            #region Alte Vorgehensweise
+            //for (int i = 0; i < autoanzahl; i++)
+            //{
+            //    autos[i].SteuernBerechnen();
+            //}
+            //for (int i = 0; i < motorradanzahl; i++)
+            //{
+            //    motorraeder[i].SteuernBerechnen();
+            //}
+            #endregion
         }
     }
 }
diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.deps.json b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.deps.json
new file mode 100644
index 0000000000000000000000000000000000000000..3c01f9d328a6f84ff105b3f53d9fd876c28de74e
--- /dev/null
+++ b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.deps.json
@@ -0,0 +1,23 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v3.1",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v3.1": {
+      "03VererbungKfzIntro/1.0.0": {
+        "runtime": {
+          "03VererbungKfzIntro.dll": {}
+        }
+      }
+    }
+  },
+  "libraries": {
+    "03VererbungKfzIntro/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    }
+  }
+}
\ No newline at end of file
diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.dll b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.dll
new file mode 100644
index 0000000000000000000000000000000000000000..28f19e74f4bd1f0eccbcd528755c0fe297ac5991
Binary files /dev/null and b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.dll differ
diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.exe b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.exe
new file mode 100644
index 0000000000000000000000000000000000000000..3b4e4e57a0a5c83c30722eb721c99b68437c5b32
Binary files /dev/null and b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.exe differ
diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..a202b4aa223780bd6bc1510855455469802ba2cf
Binary files /dev/null and b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb differ
diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.dev.json b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.dev.json
new file mode 100644
index 0000000000000000000000000000000000000000..3becea41545888f98131d88ad51766e8ddde3bce
--- /dev/null
+++ b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.dev.json
@@ -0,0 +1,8 @@
+{
+  "runtimeOptions": {
+    "additionalProbingPaths": [
+      "C:\\Users\\wienkop\\.dotnet\\store\\|arch|\\|tfm|",
+      "C:\\Users\\wienkop\\.nuget\\packages"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.json b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..bc456d7868bb54ec1809da30e339cd43f0a8a09c
--- /dev/null
+++ b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.json
@@ -0,0 +1,9 @@
+{
+  "runtimeOptions": {
+    "tfm": "netcoreapp3.1",
+    "framework": {
+      "name": "Microsoft.NETCore.App",
+      "version": "3.1.0"
+    }
+  }
+}
\ No newline at end of file
diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.CoreCompileInputs.cache b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000000000000000000000000000000000000..866b744e18d17bd43f4fc4b66cbb3dbc817b1992
--- /dev/null
+++ b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+c0523642d3f3714f80c0cf31b3f8720f51a0bc09
diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.FileListAbsolute.txt b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000000000000000000000000000000000000..51b27d5196f60bccb7c3dc98a4eb8d4b989671cd
--- /dev/null
+++ b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.FileListAbsolute.txt
@@ -0,0 +1,13 @@
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.exe
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.deps.json
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.runtimeconfig.json
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.runtimeconfig.dev.json
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.dll
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.pdb
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.csprojAssemblyReference.cache
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.csproj.CoreCompileInputs.cache
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.AssemblyInfoInputs.cache
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.AssemblyInfo.cs
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.dll
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.pdb
+C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.genruntimeconfig.cache
diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csprojAssemblyReference.cache b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csprojAssemblyReference.cache
new file mode 100644
index 0000000000000000000000000000000000000000..d7dd684443de8ada82f92a8e0cf14a64b9096fd6
Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csprojAssemblyReference.cache differ
diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.dll b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.dll
new file mode 100644
index 0000000000000000000000000000000000000000..28f19e74f4bd1f0eccbcd528755c0fe297ac5991
Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.dll differ
diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.exe b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.exe
new file mode 100644
index 0000000000000000000000000000000000000000..3b4e4e57a0a5c83c30722eb721c99b68437c5b32
Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.exe differ
diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.genruntimeconfig.cache b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.genruntimeconfig.cache
new file mode 100644
index 0000000000000000000000000000000000000000..34bedab819ef1631d37d6e87ef9a716c545a105e
--- /dev/null
+++ b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.genruntimeconfig.cache
@@ -0,0 +1 @@
+86c8e15dd33445635927cfaf398408205fd11473
diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..a202b4aa223780bd6bc1510855455469802ba2cf
Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb differ
diff --git a/04 UebgDi Vererbung/Program.cs b/04 UebgDi Vererbung/Program.cs
index 5fa24c1301d7b65d44d7d1696eb816c0a6156f6c..b2c94005845c742b18d2a6f6412c04b6553d417d 100644
--- a/04 UebgDi Vererbung/Program.cs	
+++ b/04 UebgDi Vererbung/Program.cs	
@@ -6,22 +6,44 @@ namespace _04_UebgDi_Vererbung
     //    Dreieck (int p1x, int p1y, int p2x, int p2y, int p3x, int p3y)
     //    Rechteck(int topX, int topY, int width, int height)
     //    Circle(int x, int y, int r)
-    // Erstellen Sie in Main() ein Feld in dem Sie diese Objekte miteinander speichern können -
-    // hierfür ist die Erstellung einer gemeinsamen Basisklasse erforderlich -
+    // Erstellen Sie in Main() EIN Feld in dem Sie diese Objekte miteinander speichern können -
+    // hierfür ist die Erstellung einer gemeinsamen Basisklasse GrafischesObjekt erforderlich -
     // und schreiben Sie eine for/foreach-Schleife, die für die jeweiligen Feldeinträge
     // die entsprechende Ausgabe()-Methode aufruft. Hier reicht es aus, z.B. einfach Kreis(x,y,r) 
     // auszugeben.
-    class Dreieck
-    { }
-    class Rechteck
+    class GrafischesObjekt
+    {
+        public virtual void Print() { }
+        // virtual ~ Diese Methode kann/darf in den abgeleiteten Klassen überschrieben werden
+    }
+    class Dreieck : GrafischesObjekt
     { }
-    class Kreis
+    class Rechteck : GrafischesObjekt
     { }
+    class Kreis : GrafischesObjekt
+    {
+        int x, y, r;
+        public Kreis(int x, int y, int r)
+        {
+            this.x = x;
+            this.y = y;
+            this.r = r;
+        }
+        public override void Print()
+        {
+            // base.Print();  // Evtl. Nutzen der Funktionalität der Basisklasse
+            Console.WriteLine($"Kreis: {x},{y}, radius: {r}");
+        }
+
+    }
     class Program
     {
         static void Main(string[] args)
         {
-            Console.WriteLine("Hello World!");
+            GrafischesObjekt[] grObjekte = new GrafischesObjekt[5];
+            grObjekte[0] = new Kreis(10,20, 5);
+            //((Kreis) grObjekte[0]).Print();
+            grObjekte[0].Print();
         }
     }
 }