Какая польза от интерфейса?Как динамическое разрешение метода работает во время выполнения? - PullRequest
1 голос
/ 23 октября 2010

В чем разница между абстрактным классом и интерфейсом?

Ответы [ 5 ]

8 голосов
/ 23 октября 2010

Интерфейсы не сохраняют состояния. Они не могут давать переменные, хотя могут иметь константы. Кроме того, интерфейсы обеспечивают возможность «проектирование по контракту». Абстрактные классы требуют конкретной реализации, где интерфейсы обеспечивают большую гибкость, поскольку любой класс, реализующий этот интерфейс, может быть заменен во время выполнения. Кроме того, поскольку интерфейсы просто описывают поведение, а не реализацию, они допускают множественное наследование. Также абстрактные классы более удобны для проектирования, поскольку они обеспечивают принудительное выполнение компилятором, поскольку подклассы должны реализовывать абстрактные методы. Интерфейсы и абстрактные классы связаны, но служат различным целям. Во время выполнения проверяется тип объекта и вызывается соответствующий метод класса. Это также называется поздним связыванием. Это делает виртуальная машина времени выполнения, а не программист, таким образом извлекая тест If Else из кода вашей программы. Таким образом, ваш код более гибок и не зависит от типа класса для определения правильного метода для вызова. Таким образом нас также называют полиморфизмом.

5 голосов
/ 23 октября 2010

В абстрактном классе могут быть реализованы методы. Интерфейс не может. Также класс может расширять только один абстрактный класс, но может реализовывать множество интерфейсов.

4 голосов
/ 23 октября 2010

Использование интерфейса : В разработке программного обеспечения существует ряд ситуаций, когда разрозненным группам программистов важно согласиться на "контракт", в котором прописано, как взаимодействует их программное обеспечение. Каждая группа должна иметь возможность писать свой код, не зная, как пишется код другой группы. Вообще говоря, интерфейсы - это такие контракты.

Одним из преимуществ использования интерфейсов является то, что они имитируют множественное наследование. Все классы в Java (кроме java.lang.Object, корневого класса системы типов Java) должны иметь ровно один базовый класс; множественное наследование классов не допускается. Кроме того, класс Java может реализовывать, а интерфейс может расширять любое количество интерфейсов; однако интерфейс может не реализовывать интерфейс.

Еще одним применением интерфейсов является возможность использовать объект, не зная его типа класса, а скорее только то, что он реализует определенный интерфейс.

Различие между абстрактным классом и интерфейсом : Абстрактный класс - это класс, который содержит один или несколько абстрактных методов, которые должны быть реализованы подклассами. Абстрактный класс также не может содержать никаких абстрактных методов. Интерфейс Java может содержать только объявления методов и открытые статические конечные константы и не содержит их реализацию. Классы, которые реализуют Интерфейс, должны предоставить определение метода для всех существующих методов. Абстрактный класс означает, что класс должен быть расширен. Абстрактный класс должен быть расширен первым конкретным классом в дереве наследования. В абстрактном классе мы можем иметь как объявление, так и определение метода, но в интерфейсах есть только сигнатуры метода, а не его определение. Интерфейс похож на 100% чистый абстрактный класс. Класс может расширять только один класс, но может реализовывать несколько интерфейсов. Интерфейсы обеспечивают множественное наследование, не вызывая смертельного алмаза смерти проблемы.

0 голосов
/ 23 октября 2010

Недостаток: если у вас есть класс 1000, реализующий интерфейс в вашей библиотеке, завтра, если вы хотите иметь дополнительный метод в интерфейсе, изменения должны отражаться везде

0 голосов
/ 23 октября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...