abstract class A_Abstract {
public function save(O $obj) {...}
}
No matter that O is extended from O_Base, they are two different objects, and as A extends A_Abstract the save functions need to be compatible with each other, meaning you need to pass the same object in, O.