Auf Thema antworten

Ja, so ganz ist nicht klar, worauf sich die Frage bezieht. Üblicherweise geht es ja nicht darum, was man wo übergibt, sondern als was das dort bekannt ist. Zumindest sollte man IMHO tunlichst vermeiden, irgendeine Abstrakte Klasse "bekannt" zu machen, oder anzunehmen, dass man eine solche bekommt (auch wenn man sie natürlich heimlich still und leise verwenden kann).


Als Beispiel: Das ist OK

[code=Java]

class TypeA

{

    private SomeInterface x;

 

    public void setX(SomeInterface x) { this.x = x; }

    public void doSomething() { x.doit(); }

}

[/code]


Das folgende ist IMHO fragwürdig, weil dann der Sinn des Interfaces etwas verloren geht, und die Abstrakte Klasse überall bekannt ist:

[code=Java]

class TypeB

{

    private SomeAbstractClassImplementingAnInterface x;

 

    public void setX(SomeAbstractClassImplementingAnInterface  x) { this.x = x; }

    public void doSomething() { x.doit(); }

}

[/code]

(Es hätte den theoretischen Vorteil, dass man weitere Methoden zur abstract class hinzufügen kann, und niemand anderes sich um deren Implementierung kümmern muss, aber das ist SEHR oberflächlich betrachtet und sollte genauer durchgedacht werden)


Und schließlich noch

[code=Java]

class TypeC

{

    private ConcreteClass x;

 

    public void setX(ConcreteClass x) { this.x = x; }

    public void doSomething() { x.doit(); }

}

[/code]

Was natürlich nicht unüblich ist, aber in bezug auf Erweiterbarkeit und Abstraktion ist's damit u.U. nicht so weit her...



Oben