Помните, что интерфейсы определяют, что что-то делает, а реализация определяет, как оно это делает.
Итак, в вашем случае, определите интерфейс ftp, который определил действия, которые вы хотите - войти в систему, получить список файлов,помещение файла, получение файла, отключение и т. д.
Создание двух реализаций, одна для обычного ftp, другая для защищенного.Может оказаться полезным создать «базовую» реализацию ftp с общей обработкой, которая расширена двумя конкретными производными.
Итак, у вас есть:
ftp интерфейс - содержащий объявления методов для обеспечения функциональности
абстрактный класс baseftp - реализация интерфейса ftp, вызов определенных абстрактных методов для конкретных безопасных или незащищенных действий
конкретный класс secureftp - реализует абстрактные методы, определенные в baseftp для безопасного соединения
конкретный класс insecureftp - реализует абстрактные методы, определенные в baseftp для незащищенного соединения