Polymorphie mit C# und Java
Posted September 7, 2007
Obwohl die Syntax von Java und C# sehr ähnlich sind, gibt es doch auch sehr gravierende Unterschiede. Denn während in Java alle Methode implizit als virtuell gelten, so muss dies bei C# extra mit dem keyword virtual gekennzeichnet werden wie auch bei C++. Um diesen Unterschied zu veranschaulichen, habe ich hier einmal den entsprechenden Code in C# und Java gegenübergestellt.
Polymorphie in C#
using System; class Haus { public virtual String getBewohner() { return "niemand"; } public String getBesitzer() { return getBewohner(); } } class Hotel : Haus { public override String getBewohner() { return "Gäste"; } public new String getBesitzer() { return "Hotelier"; } } class Polymorphie { static void Main(string[] args) { Haus haus = new Haus(); Console.WriteLine(haus.getBewohner()); // niemand Console.WriteLine(haus.getBesitzer()); // niemand Hotel hotel = new Hotel(); Console.WriteLine(hotel.getBewohner()); // Gäste Console.WriteLine(hotel.getBesitzer()); // Hotelier haus = hotel; Console.WriteLine(haus.getBewohner()); // Gäste Console.WriteLine(haus.getBesitzer()); // Gäste (!!!) } }
Polymorphie in Java
public class Haus { public String getBewohner() { return "niemand"; } public String getBesitzer() { return getBewohner(); } } public class Hotel extends Haus { public String getBewohner() { return "Gäste"; } public String getBesitzer() { return "Hotelier"; } } public static void main(String[] args) { Haus haus = new Haus(); System.out.println(haus.getBewohner()); // niemand System.out.println(haus.getBesitzer()); // niemand Hotel hotel = new Hotel(); System.out.println(hotel.getBewohner()); // Gäste System.out.println(hotel.getBesitzer()); // Hotelier haus = hotel; System.out.println(haus.getBewohner()); // Gäste System.out.println(haus.getBesitzer()); // Hotelier }
(originally posted 2007-09-07)