абстрактные классы, конструктор и интерфейс - PullRequest
1 голос
/ 31 октября 2011

Я действительно сбит с толку, и я прочитал МНОЖЕСТВО вопросов по этой теме, и я не смог точно определить, что конкретно интерфейс может сделать, чего не может сделать абстрактный класс.

Ответы [ 8 ]

9 голосов
/ 31 октября 2011

Класс может реализовывать несколько интерфейсов, но не может реализовывать несколько абстрактных классов.

3 голосов
/ 31 октября 2011

Сам интерфейс ничего не может сделать. Он просто определяет вид контракта между классом (ами), которые предоставляют некоторую функциональность, и вызывающей стороной.

Абстрактный класс - это класс, который определен как abstract. Если в классе есть хотя бы один абстрактный метод (т.е. метод без реализации), он должен быть определен как абстрактный. Но абстрактный класс также может содержать реализации.

Интерфейс не может содержать реализацию. Только абстрактные методы и константы (статические конечные поля).

Класс может реализовывать несколько интерфейсов и расширять только один класс (включая абстрактный класс).

Надеюсь, это поможет.

2 голосов
/ 31 октября 2011

Абстрактный класс также может содержать реализацию функции, а не просто определять функции, которые должны быть реализованы путем наследования классов

1 голос
/ 31 октября 2011

Абстрактные классы - это частично реализованные классы, которые будут расширены конкретными классами (не абстрактными) для реализации.

Пример: enter image description here

Этот пример не означает, чтоподклассы должны реализовывать эти методы (как это происходит при реализации интерфейса).Вы можете объявить реферат подкласса, и реализация будет сделана позже другим подклассом.(Например: Boat может иметь подклассы «SpeedBoat» и FisshingBoat, и может реализовывать honk () по-разному)

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

Класс может реализовывать много интерфейсов, но может расширять только один класс.Посмотрите на этот небольшой пример интерфейсов:

enter image description here

Как вы можете видеть, когда мы используем интерфейсы, мы можем иметь большую гибкость.Некоторые враги могут делать то же, что и некоторые герои (DarkKnight может бросать стрелы).Я надеюсь, что теперь вы чувствуете разницу между абстрактными классами и интерфейсами.

Помните об интерфейсах и абстрактных классах:

  • Интерфейсы не имеют переменных, только не реализованные методынеявные абстрактные методы)

  • Классы, реализующие интерфейсы, должны иметь все методы интерфейса в своем теле

  • Один класс может расширять только один классно реализуйте более одного интерфейса

  • Если у класса есть абстрактный метод, он должен быть объявлен как абстрактный.

  • Абстрактные классы могут реализовывать интерфейсы

  • Интерфейсы могут расширять другие интерфейсы (более одного)

Я не знаю, если я что-то забуду, надеюсь, эта информация поможет.

0 голосов
/ 31 октября 2011

Абстрактный класс - это класс - он определяет всю или часть реализации некоторого поведения для класса объектов, но с некоторыми точками расширения для конкретных подклассов.

Интерфейс - это тип - он определяет набор операций, предоставляемых любым классом, реализующим интерфейс.

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

0 голосов
/ 31 октября 2011

Интерфейс и абстрактный класс почти одинаковы. Основное различие заключается в том, что используя интерфейс, мы не можем определить тело метода, но используя абстрактный класс, мы можем определить тело метода внутри абстрактного класса или при его реализации.например,

Interface abc()
{
 string xyz();
}

abstract abc()
{
 string xyz()
{
// define body
}
}
or 
abstract abc()
{
 string xyz();
}
0 голосов
/ 31 октября 2011

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

0 голосов
/ 31 октября 2011

Абстрактный класс может все, что может сделать интерфейс. Однако обратное неверно.

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