refactor: Make TransferFunction an abstract class, not interface