Podrias tener un metodo final que fuera el que se encargara de hacer el query y renderear la lista, luego en cada hijo que vaya heredando solo haces una version aparte de el metodo y regresas la funcion final, algo asi:
Código PHP:
class A {
final protected function _selectList() {}
}
class B extends A {
public function selectList($query) {
$this->query = $query;
return parent::_selectList();
}
}
class B extends C {
public function selectList($query) {
$this->query = $query;
return parent::_selectList();
}
}