Stimmt es, dass das Überschreiben konkreter Methoden ein Codegeruch ist? Weil ich denke, wenn Sie konkrete Methoden überschreiben müssen:
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
es kann umgeschrieben werden als
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
und wenn B ein () in A wiederverwenden möchte, kann es wie folgt umgeschrieben werden:
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
Wofür ist keine Vererbung erforderlich, um die Methode zu überschreiben?
virtual
Schlüsselwort verwenden, um Überschreibungen zu unterstützen. Das Problem wird also durch die Einzelheiten der Sprache mehr (oder weniger) mehrdeutig.
final
Modifikator genau für solche Situationen existiert. Wenn das Verhalten der Methode so ist, dass sie nicht überschrieben werden soll, markieren Sie sie als final
. Erwarten Sie andernfalls, dass Entwickler es möglicherweise außer Kraft setzen.