Polymorphie

Programme, die Aspekte der Objektorientierung enthalten sind langsamer als Programme (bzw. Programmiersprachen), die ohne auskommen. Der Hauptgrund dafür liegt in der Polymorphie.

Bei einer "normalen" Funktion steht schon während des Compilierens fest, welcher Programmcode beim Aufruf der Funktion ausgeführt wird. Bei einer polymorphen Methode (und bei Java sind alle Instanzmethoden polymorph) ist das anders. Hier wird erst während der Laufzeit des Programmes entschieden, welcher Programmcode ausgeführt wird.

Zur Erläuterung seien diese beiden Klassen gegeben, wobei Klasse B von A erbt. Ausserdem überschreibt B die Methode foo().


  class A {

    public void foo() {
      System.out.println("Klasse A");
    }

  }

  class B extends A {

    public void foo() {
      System.out.print("nicht ");
      super.foo();
    }

  }

Mit Hilfe von super.foo() wird die alte überschriebene Methode der Super-Klasse aufgerufen. Bei dem folgenden Codefragment wird die Methode foo() jeweils mit einer Instanz von A und einer Instanz von B aufgeführt.


  A a = new A();
  B b = new B();

  a.foo();
  b.foo();

Man erhält die Ausgabe:


  Klasse A
  nicht Klasse A

Angenommen die Instanz b wird nun durch Casting in den Typ A umgewandelt.


  A x = (A) b;

  x.foo();

Aufgrund der Polymorphie wird (während der Laufzeit) nachgeschaut, von welchem Typ die Instanz x tatsächlich ist. Dann wird die Methode foo() der Klasse B gestartet, und nicht die von A, obwohl die Variable x vom Typ A ist. Demnach erhält man die Ausgabe:


  nicht Klasse A

Dieses "Nachschauen" des tatsächlichen Typs der Instanz ist der Grund für die längere Rechenzeit bzw. schlechtere Performance von objektorientierten Programmiersprachen. Natürlich hat Polymorphie auch Vorteile. Die Möglichkeit des Überschreibens einer Klasse und das Casting von Instanzen zurück zu dieser Klasse erleichert das Ändern von vorhandenen Programmen und Algorithmen.


Erstellt von Markus Durzinsky, aktualisiert 2004-03-29
Für Fragen, Probleme oder Anregungen stehe ich gerne zur Verfügung