2013-06-26 3 views
0

У меня есть два вопросаПочему интерфейсы в Java, если у нас есть абстрактный класс?

  1. Зачем нам нужен интерфейс в Java, даже если абстрактный класс может сделать функциональность интерфейсов?
    При поиске я нашел место, где абстрактный класс не выполняет функции интерфейсов, , когда класс должен реализовывать несколько интерфейсов.
    Это единственная причина для воссоздания концепции интерфейсов в java?

  2. Каково использование статических конечных переменных в интерфейсах? Нужны примеры программ, которые используют использование переменных в интерфейсах.

Thanks in Advance.

+0

Если у вас есть два вопросы, задайте два вопроса. Или, еще лучше, google эти два вопроса. У 99% шансов у них будет ответ на первой странице результатов поиска. – Dariusz

ответ

2
  1. Как вы сказали, вы можете наследовать только один абстрактный класс, но многие интерфейсы. Кроме того, наследование подразумевает отношение «is-a», но интерфейс указывает некоторый набор операций, которые должен поддерживать объект - по сути, это поведение. Я рассматриваю их как отдельные идеи. По моему опыту, классы имеют тенденцию быть существительными (например, Integer, List), а интерфейсы - это глаголы (например, Cloneable, Serializable).

  2. Если класс реализует интерфейс с константами, то класс может ссылаться на эти константы без квалификационного имени класса (javapractices.com). Однако, как объясняет this post, это плохая практика.

+0

мой вопрос. Это единственная причина? – vignesh

+0

Что относительно статических конечных переменных? – vignesh

1

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

Просто посмотрите на ArrayList класс:

public class ArrayList<E> 
extends AbstractList<E> 
implements List<E>, RandomAccess, Cloneable, Serializable 

Это не было бы возможно без интерфейсов ...

второй) Там нет переменных в интерфейсах. По умолчанию они public final.

3rd) Используя интерфейсы, вы можете, например, создавать коллекции с интерфейсом как тип элемента и заполнять его объектами совершенно разных типов, которые не имеют общего базового класса (выделено Object).

Без интерфейсов вы можете иметь только коллекцию Object и проверить тип и бросок для каждого объекта.

С интерфейсами вы можете просто рассматривать их как реализации этого интерфейса и вызывать методы интерфейса на них, даже не зная их конкретного типа.

+0

Мне жаль снова спрашивать.Это единственная причина? – vignesh

1

1.

Является ли это единственной причиной воспитывающим концепции интерфейсов в Java?

Да.Смотрите также Interface vs Abstract Class (general OO):

интерфейсы могут быть множественными наследуются, абстрактные классы не может (это, вероятно, ключ бетон причина интерфейсов существовать отдельно от Abtract классов - они разрешают реализацию множественного наследования, который удаляет многие из проблемы общего МИ).

2.

Что такое использование переменных в интерфейсах? Нужны примеры программ, которые используют использование переменных в интерфейсах.

Вы имеете в виду статические переменные? Я бы никогда не использовал «устаревшие» статические переменные в интерфейсе, но статические константы вполне в порядке - таким образом вы можете добавить дополнительную информацию, которая как-то имеет отношение к определению интерфейса.

+0

любые примеры использования таких статических константных переменных, которые добавляют дополнительную информацию, которая каким-то образом связана с тем, как определяется интерфейс – vignesh

1

Зачем нужен интерфейс в java, даже если абстрактный класс может использовать функциональность интерфейсов ? При поиске я нашел место, где абстрактный класс не выполняет функциональность интерфейсов, то есть , когда класс должен реализовывать несколько интерфейсов. Является ли это единственной причиной возникновения концепции интерфейса в Java? ?

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

Каково использование переменных в интерфейсах? Нужны примеры программ, которые использование переменных в интерфейсах приветствуется.

Любое «поле», которое вы объявляете в интерфейсе, будет публичным статическим конечным полем. Другими словами, константа. Так что если вы хотите использовать какой-либо постоянной во всех подклассов, то вы можете определить те в интерфейсе

+0

k Что такое использование констант – vignesh

+0

может быть много важного использования константы .. скажем, вы хотите использовать доль PI во всем вашем подклассе. Вы можете объявить его в интерфейсе – stinepike

2

Интерфейсы полезны в следующих контекстах:

1-> Как уже упоминалось, в Java можно расширить только один класс, но может реализовывать несколько интерфейсов. И это действительно реализуется, например, если вы хотите создать фоновый поток в вашем классе и расширить какой-либо класс для повторного использования, то насколько больным вы расширяете класс Thread? В этом случае Runnable приходит на помощь, что является интерфейсом.

2-> Также сопряженные помогают нам обеспечить соблюдение определенного шаблона проектирования.

3-> Также служат Маркируемый интерфейсы, как и в случае сериализуемого интерфейса

Переменные в интерфейсе статические переменные, которые действуют как gloabal и могут совместно использоваться всеми классами, которые реализуют этот интерфейс

Смежные вопросы