В чем разница между следующим интерфейсом и абстрактным классом:Как принять решение между абстрактным и интерфейсом?
public interface MyInterface
{
public int get1();
public int get2();
public int get3();
}
public abstract class MyAbstract
{
public abstract int get1();
public abstract int get2();
public abstract int get3();
}
Интервьюер не был уверен, со следующими ответы, он хотел услышать что-то еще:
я должен продлить MyAbstract, и тогда я не могу имеют больше расширений, тогда как в случае реализации MyInterface я открыт для наследования.
Я должен обеспечить реализацию всех трех методов, если используется «реализует MyInterface», тогда как в случае «extends MyAbstract» я открыт для переноса абстрактной абстрактности.
С точки зрения дизайна, все библиотеки работают с интерфейсами не на абстрактных классах, поэтому хорошая практика проектирования позволяет использовать интерфейсы, чтобы в любой момент я мог создавать любой класс (реализующий MyInterface), который может быть использован в некотором методе библиотека. (в основном такой же, как пункт 1)
Что еще может быть? Меня не интересуют переменные в интерфейсе/абстрактном классе и т. Д. Как решить, какой из них использовать?
Возможный дубликат [Когда использовать абстрактный класс или интерфейс?] (Http://stackoverflow.com/questions/1221512/when-to-use-abstract-class-or-interface) – mprabhat
Ваша точка № 2 не имеет значения, t имеет смысл (как написано). Класс может быть объявлен как «реализует MyInterface», и если он также объявлен «абстрактным», ему не нужно реализовывать какие-либо методы. Очки 1 и 3 хороши - любой интервьюер, которому не нравятся эти причины, должен сам объяснять. –
Почему это было приостановлено без объяснения причин в комментариях? Я думаю, что это правильный вопрос. – Axel