Research abstract classes, interface and type hinting