made Ship an abstract class instead of interface