@Sebi1412 p.s.: Dependency Injection muss natürlich nicht mit einer abstrakten Basisklasse kombiniert werden. Man könnte in dem Beispiel von oben auch direkt eine FooTransport übergeben. Das kann auch manchmal Sinn machen - wobei mir jetzt aus dem Stegreif kein Beispiel einfällt. Am flexibelsten ist es allerding mit der abstrakten Basisklasse. Auch wenn man es im eigentlichen Programm nicht braucht, ist es in Tests oft sehr praktisch. z.B. kann man so die Messenger Klasse testen, ohne dass man einen echten Server braucht mit dem man die Messenger Objekte kommunizieren lassen kann. Statt dessen macht man für den Test eine spezielle TestTransport Klasse, die ebenfalls von AbstractTransport abgeleitet ist, und bloss so tut als ob sie mit einem Server kommunizieren würde.