Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302

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

12.02.2015, 15:45. Показов 2179. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Помогите разобраться с разницей между абстрактным классом и интерфейсом. Или подскажите где я могу об этом очень подробно прочитать (на википедии читала, не всё поняла).

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

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

Разница между интерфейсом и абстрактным классом в том, что интерфейс может делать множетсвенное наследование, абстрактный класс нет.

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

Мне не совсем понятна разница между абстрактны и интерфейсом и почему абстрактный от интерфейса?

вопрос 2: предположим, у меня в классе должно быть 1 обязательное поле. Где мне об этом указать, что оно должно быть? В интерфейсе, в абстр. классе или есть ещё какой-то способ это указать, кроме как написать в самих производных классах фигур, или это нигде не указать и всё на волю и ум программиста?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2015, 15:45
Ответы с готовыми решениями:

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

Выбор между абстрактным классом, интерфейсом и простым классом
Здравствуйте. Помогите определиться, что следует выбрать в следующей ситуации, а главное почему следует выбирать именно это. ...

Разница между структурой и классом
Подскажите почему при вызове метода переменная структуры change не изменяет свое изначально заданное значение на новое, в отличии от...

8
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
12.02.2015, 18:55
Лучший ответ Сообщение было отмечено Nullik как решение

Решение

Лучше указать в контексте какого языка программирования выполняется задание, потому что могут возникать небольшие нюансы. Учитывая, что в профиле указан С++, дальше буду говорить в его терминах.

Цитата Сообщение от Nullik Посмотреть сообщение
Вот что я поняла - интерфейс содержит абстрактные методы, которые обязаны быть реализованы в наследуемом классе.
Интерфейс содержит объявления абстрактных методов.
Если класс формально наследуется от интерфейса, то он не обязан реализовывать все методы. В этом случае он сам остается абстрактным классом.

Цитата Сообщение от Nullik Посмотреть сообщение
Абстрактный класс тоже реализует абстрактные методы, которые обязаны быть реализованы в наследуемом классе.
Только не реализует.
Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод. Помимо этого в нем также могут быть private и protected поля и методы, а также методы с реализацией.

Цитата Сообщение от Nullik Посмотреть сообщение
Мне не совсем понятна разница между абстрактны и интерфейсом и почему абстрактный от интерфейса?
Учитывая, что задание учебное, я бы не заморачивался. Мне тоже неочевидно зачем добавлять ступеней в линейную иерархию. Если требуют так — сделать и забить.

Цитата Сообщение от Nullik Посмотреть сообщение
предположим, у меня в классе должно быть 1 обязательное поле. Где мне об этом указать, что оно должно быть? В интерфейсе, в абстр. классе или есть ещё какой-то способ это указать, кроме как написать в самих производных классах фигур, или это нигде не указать и всё на волю и ум программиста?
Ок, пусть есть общие данные, присутствующие во всех классах.
— Поместить их в интерфейс нельзя, потому что см выше — в интерфейсе только объявления методов.
— Копировать в каждый класс — по очевидным причинам не самое оптимальное решение.
— Остается базовый класс. Там им и место.
1
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
12.02.2015, 22:42  [ТС]
0x10, внесу поправку - C#.

Цитата Сообщение от 0x10 Посмотреть сообщение
Учитывая, что задание учебное, я бы не заморачивался. Мне тоже неочевидно зачем добавлять ступеней в линейную иерархию. Если требуют так — сделать и забить.
не, не учебное, для себя хочу понять.

Тогда ещё такой вопрос - что главнее - интерфейс или абстрактный? ну, учебное может быть и с косяками, хотя ответ "от интерфейса в абстрактный" - этот ответ только из-за того, что интерфейс позволяет реализовать множетсвенное наследование?

Добавлено через 28 секунд
про "куда запихать поля" - спасибо))))
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
13.02.2015, 07:01
Цитата Сообщение от Nullik Посмотреть сообщение
Тогда ещё такой вопрос - что главнее - интерфейс или абстрактный?
В каком смысле? Абстрактный класс может реализовывать интерфейс, интерфейс не может наследоваться от абстрактного класса. Или вопрос в другом?
1
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
13.02.2015, 19:01  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Абстрактный класс может реализовывать интерфейс, интерфейс не может наследоваться от абстрактного класса. Или вопрос в другом?
не, всё верно, вопрос "кто кого там наследует"
Т.е.. как аксиома - абстрактный только от интерфейса. интерфейс от абстрактного никогда.

Хорошо, ещё вопрос.

Роль абстрактного класса в цепочке, что была выше?
(интерфейс фигур -> абстрактный класс фигур -> класс сферы, класс куба)
**может ли это быть из-за того, что нужны были обязательные поля (чтобы в каждом наслед. классе они прям вот строго были), а в интерфейсе их прописать нельзя?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
13.02.2015, 19:06
Цитата Сообщение от Nullik Посмотреть сообщение
Роль абстрактного класса в цепочке, что была выше?
Еще раз: в абстрактном классе помимо абстрактных методов могут быть методы с реализацией или данные. Если у всех классов в иерархии есть что-то из этого общее — может быть помещено в абстрактный класс.

Другое дело, что необходимость интерфейса тут неочевидна.
1
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
13.02.2015, 19:38  [ТС]
Аааа, вот оно что. Т.е., из этой цепочки можно выкинуть интерфейс и ничего не измениться. Поняяятно. Спасибо!
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
13.02.2015, 20:05
Цитата Сообщение от Nullik Посмотреть сообщение
Аааа, вот оно что. Т.е., из этой цепочки можно выкинуть интерфейс и ничего не измениться. Поняяятно. Спасибо!
А потом тебе захочется реализовать фигуру или группу фигур, не имеющих ничего общего с предыдущей группой, но унаследовавшись от абстрактного класса твои новые фигуры будут тащить весь этот бесполезный для них багаж.
1
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
15.02.2015, 15:13  [ТС]
korvin_, всё, поняла))) спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2015, 15:13
Помогаю со студенческими работами здесь

Разница между полиморфизмом классов и интерфейсом
Собственно хочу услышать в чем главные отличия. Вдруг выплывут интересные факты...

В чем разница между классом и шаблоном класса?
Помогите ответить. В чем разница между классом и шаблоном класса?

Разница между классом и идентификатором при указании CSS-стилей
Всем привет! Есть разница в использовании "#" или "." перед использованием в создании стилей? #topbar .topbar? Один вопрос - одна...

Полиморфизм с абстрактным классом
Добрий день, нуждаюсь в помощи. У меня есть абстрактный класс IStudent_Manip и производный класс Student_Manipulator. Хочу сделать...

Магия с абстрактным классом
Предположим, есть абстрактный класс Funk: abstract public class Func Есть класс Funk1, который унаследован от абстрактного класса: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru