W systemie Android tworzę abstrakcyjną klasę, która rozciąga się na View
(klasę Androida, do której nie mam dostępu). Abstrakcyjna klasa nadrzędna widokówCzy dodawanie ostatecznego słowa kluczowego do metody dziedziczonej/przesłoniętej jest "ok"?
@Override
protected final void onDraw(Canvas canvas) {
if(conditions) return;
// child classes should only draw if this class gives the ok
subDraw(canvas);
}
protected abstract void subDraw(Canvas canvas);
jednak dodałem ostatecznego słowa kluczowego tutaj.
Chodzi o to, że tworzę abstrakcyjną metodę, którą powinny używać podklasy zamiast onDraw. Dlatego zapobiegam nadpisywaniu onDrawu i działa.
Wiem, że istnieją projekty, które poprawią to działanie, ale działa to jak urok bez większych zmian. Moje pytanie jest bardziej ogólne, jeśli powyższe ma niepożądane skutki uboczne w czasie wykonywania lub innych problemów?!
tak, jeśli to "zachowanie, które chcesz i wiesz, co robisz – Blackbelt
to jest dokładnie to, co chcę – NikkyD
Efektem ubocznym jest to, że sprawia, że twoje podklasy trudniej jest testować (unit-). To dlatego, że nie możesz kpić z tej metody. A zatem nie można oddzielić zachowania podklas od zachowania klas. Są sposoby na rozwiązanie tego problemu, ale stosując podejście "faworyzuj kompozycję ponad dziedziczność", które najlepiej byłoby zastosować w projektowaniu aplikacji. –