Я думал об этом, и у меня были некоторые сомнения.
Когда я объявляю интерфейс, например:
public interface MyInterface
{
public void method1();
public void method2();
}
Могут ли эти методы интерфейса считаться абстрактными? Я имею в виду, что концепция абстрактного метода:
Абстрактный метод - это метод, который объявлен, но не содержит реализации.
Итак, можно ли считать эти методы абстрактными? Они не являются «чистыми» абстрактными методами, поскольку я не использую это abstract
слово, но концептуально это выглядит так.
Что вы можете сказать мне об этом?
Благодарю.
Ответы:
Интерфейс похож на «чисто» абстрактный класс. Класс и все его методы являются абстрактными. Абстрактный класс может иметь реализованные методы, но сам класс не может быть создан (полезно для наследования и последующего DRY).
Для интерфейса, поскольку никакой реализации вообще нет, они полезны для их цели: контракта. Если вы реализуете интерфейс, вы должны реализовать методы в интерфейсе.
Таким образом, разница в том, что абстрактный класс может иметь реализованные методы, а интерфейс - нет.
Причина, по которой они являются отдельными, заключается в том, что класс может реализовать несколько интерфейсов. Java и C # ограничивают класс неотъемлемой частью одного родительского класса. Некоторые языки позволяют вам наследовать от нескольких классов, и вы можете выполнить работу интерфейса через «чисто» абстрактный класс. Но множественное наследование имеет свои проблемы, а именно страшную проблему с бриллиантами
источник
Я нашел полезный ответ здесь: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
источник
Абстрактные классы могут иметь абстрактные методы.
Интерфейсы могут иметь только абстрактные методы.
method1()
иmethod2()
в вашем примере это абстрактные методы.источник
Разница здесь в том, что абстрактные классы могут содержать детали реализации, хотя сами по себе не могут быть созданы. Принимая во внимание, что интерфейс - просто шаблон для класса
источник
Таким образом, в подклассе унаследованный абстрактный метод может снова стать абстрактным без реализации, в то время как если класс реализует интерфейс, его метод должен быть реализован.
источник
Интерфейсные классы не имеют абстрактных методов. У них нет никаких методов вообще. У них просто есть список методов, которые другой класс должен реализовать, чтобы соответствовать интерфейсу. В вашем примере нет метода method1 и метода method2, пока кто-то не добавит эти методы в класс.
источник