Polymorphie mit C# und Java | September 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)

posted 2007-09-07