change ABProtocol to interface