powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем разница между абстрактным классом и интерфейсом?
43 сообщений из 43, показаны все 2 страниц
В чем разница между абстрактным классом и интерфейсом?
    #37706703
jclass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На собеседовании задали вопрос, который поставил меня в тупик: В чем принципиальная разница между абстрактным классом и интерфейсом? По условию они имеют следующие декларации:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public abstract class B{
    public static final int i = 0;

    public abstract void method1();
    public abstract void method2();
    //...
}

public interface I{
    public static final int i = 0;

    public abstract void method1();
    public abstract void method2();
    //...
}
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706713
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jclass,

ответ прост - любой класс может наследоваться от любого количества интерфейсов, но только одного класса. Во всем остальном приведенный выше код будет вести себя идентично.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706726
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, jclass!
> В чем
> принципиальная разница между абстрактным классом и интерфейсом? По
> условию они имеют следующие декларации:

Хотя бы тем, что у интерфейса слова public static final abstract можно
опускать. Т.е. получается намного короче и красивее

Код: sql
1.
2.
3.
4.
5.
public interface I{
    int i = 0;
    void method1();
    void method2();
}



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

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706730
jclass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VoDA,

Меня сама постановка вопроса смутила, первое что пришло в голову сравнивать эти две сущности, о том, что меня спрашивали о множественном "наследовании" даже в голову не лезло, слишком простой ответ казался :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706734
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jclass,
класс - это объект.
А интерфейс - это контракт или свойство объекта.
Например, класс - кисть, и интерфейс - жёсткость её.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706739
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123класс - это объект.

:)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706743
jclass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GKS_Samara,

То что, опускать модификаторы можно это понятно, в примере я специально указал, чтобы яснее было, о том, что спрашивали.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706749
jclass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Объект - это ЭКЗЕМПЛЯР класса, поробуйте на досуге создать объект абстрактного класса :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706750
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
:)
ну, я не думаю, что в Java и MS определения interface сильно отличаются
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706754
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jclassPetro123,
Объект - это ЭКЗЕМПЛЯР класса, поробуйте на досуге создать объект абстрактного класса :)
неужели.
Я тебе сказал об объекте Кисть как о философском понятии.
Т.е. понимай суть, а не зубрёжку.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706848
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraА так- отличий нет, это костыль в отсутствии множественного наследования.
Сравнивать интерфейс и наследование немного неверно. У них разное назначение.
Наследование - это расширение свойств и поведения класса.
Интерфейс, как уже писал Petro123, это контракт, который класс поддерживает.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706859
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему вопрос какой-то некорректный если он ставился именно в этой постановке, если спрашивать в общем - то вопрос хороший и тут много чего можно сказать, а в вашем случае с заданными декларациями мягко говоря глупый. Хотя от вас возможно хотели узнать про отличия абстрактного класса и интерфейса а пример просто так привели..хз
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706878
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никПо-моему вопрос какой-то некорректный
+1

в примере (если он полон) они не отличаются ничем, потому что абстрактный класс B не реализует никакого базового функционала и потому бессмыслен.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706893
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaзабыл никПо-моему вопрос какой-то некорректный
+1
в примере (если он полон) они не отличаются ничем, потому что абстрактный класс B не реализует никакого базового функционала и потому бессмыслен.
+1
я смотрел на будущее, как на прародителя объектов.
Интерфейс же, будет сбоку-припёку.
Т.е. разные вещи всё равно.
Всё зависит от точки зрения и домысливания
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706924
jclass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

Ну собствено вопрос "В чем же разница между ними?" еще и на другом примере ставился:

Код: java
1.
2.
3.
4.
5.
6.
7.
public abstract class B{

}

public interface I{

}



Собственно ответ интервьювера(ов) поразил, оказавается спрашивали про "множественное наследование" интерфейсов, а я как не ищущий простых ответов на дословный вопрос залип на на нем :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706925
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Dan Black!

> Сравнивать интерфейс и наследование немного неверно. У них разное
> назначение.

Не совсем. Интерфейс- это его публичные методы/свойства.
Т.е. у любого класса есть реализуемый им безымянный интерфейс :)

> Наследование - это расширение свойств и поведения класса.

И интерфейса- тоже.

Отличии именно в том, что у интерфейса не может быть реализации.
А в скале есть trait, которые как бы и не класс, но и не интерфейс :)

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706944
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jclass,
ага, типа - чем отличает вырожденное дерево от палки.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37706965
jclass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ах да, у абстрактного класса может быть конструктор по умолчанию который не можем объявить абстрактным:) в отличии от интерфейса. Но ответ ожидали другой, что любой другой класс может реализовать сколь угодно интерфейсов, а ведь вопрос был задан в чем различие между абстрактным классом и интерфейсом при условии аналогичных сигнатур класса. Понятно, что если бы намекнули туда куда клонят, то ответ был бы очевиден, тогда не пришлось бы отвечать :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707010
jclass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dan BlackНаследование - это расширение свойств и поведения класса.

Не обязательно.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707032
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jclassDan BlackНаследование - это расширение свойств и поведения класса.
Не обязательно. Правильные пацаны обычно обосновывают свой ответ ;)
Кроме того, моя цель была не написать полное описание термина наследования, так что хотелось бы в контексте "интерфейс - это костыль в отсутствии множественного наследования." что-нибудь услышать.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707050
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan Blackтак что хотелось бы в контексте "интерфейс - это костыль в отсутствии множественного наследования." что-нибудь услышать.
зачем?
Было много флеймов на данную тему :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707061
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Dan Blackтак что хотелось бы в контексте "интерфейс - это костыль в отсутствии множественного наследования." что-нибудь услышать.
зачем?
Было много флеймов на данную тему :)Согласен, данная подтема официально закрыта :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707064
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan Blackjclassпропущено...

Не обязательно. Правильные пацаны обычно обосновывают свой ответ ;)

"расширение свойств и поведения класса" это наследование с соблюдением LSP. Можно реализовать наследование не соблюдая LSP.
Соостветсвенно:
наследование - это "не обязательно" "расширение свойств и поведения класса".
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707080
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz"расширение свойств и поведения класса" это наследование с соблюдением LSP. Можно реализовать наследование не соблюдая LSP.
Соостветсвенно:
наследование - это "не обязательно" "расширение свойств и поведения класса".Да, вот и получаются в результате такого наследования из ножей танки :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707198
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Dan Black!

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

Что услышать? При наличии множественного наследования интерфейс как
языковая сущность не нужен. Бритвой отрезает.
Понятие "класс" включает в себя интерфейс.

PS: интерфейсы в смысле COM немного не в тему.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707259
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только не говорите новичку что Classloader видит интерфейсы и классы как.... ОБЪЕКТЫ.

Ато у него мозг совсем перегреется.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707666
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraПри наличии множественного наследования интерфейс как языковая сущность не нужен. Бритвой отрезает.ИМХО причина и следствие поменялись местами в высказывании этом

Наличие интерфейсов это следствие отказа от множественного наследования. Множественное наследование порождает большие возможности усложнения на пустом месте, потому от них отказались и ввели интерфейсы. Интерфейсы правда тоже не идеал - появились traits ;)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37707716
risk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37708387
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
riskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов.
это опупительно важно
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37708463
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
riskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов.далеко не факт.

Если обследовать класс через рефлекшен API, то все его интерфейсы представлены в виде объектов класса java.lang.Classjavadocpublic Class<?>[] getInterfaces()
Determines the interfaces implemented by the class or interface represented by this object.

также в некоторых случаях декомпилятор реверсил интерфейсы в виде абстрактных классов.

потому ИМХО на уровне вируальной машины абстрактные классы без реализации методов тождественны интерфейсам.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37709286
risk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAriskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов.далеко не факт.

Если обследовать класс через рефлекшен API, то все его интерфейсы представлены в виде объектов класса java.lang.Classjavadocpublic Class<?>[] getInterfaces()
Determines the interfaces implemented by the class or interface represented by this object.

также в некоторых случаях декомпилятор реверсил интерфейсы в виде абстрактных классов.

потому ИМХО на уровне вируальной машины абстрактные классы без реализации методов тождественны интерфейсам.

Декомпилятор какой ? От Oracle|Sun или сторонний? скорее всего сторонний, потому он явно не может знать всех деталей реализации JVM и компилятора
По поводу интерфейсов через рефлексию - а что там собственно говоря могли вернуть? В яве есть только два варианта массив value типов или инстансы классов...
По поводу абстрактных классов без реализации - согласен с вашим мнением. Скорее всего там идет подстановка - даже если вы объявили асбтрактный класс без реализаций - то внутри JVM он будет представлен интерфейсом.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37709288
risk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashariskСтранно, почему никто не упомянул о том, что интерфейс с абстрактный класс наверняка имеют разную структуру, хотя бы из-за той же таблицы виртуальных методов.
это опупительно важно
Ну тогда надо было посылать сразу в гугл и не рассусоливать то что можно нагуглить за 2 минуты....
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37709375
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
riskНу тогда надо было посылать сразу в гугл и не рассусоливать то что можно нагуглить за 2 минуты....
это всегда по настроению
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37712016
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37712097
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabПрально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации.
ну, в Java ещё впихнули туда набор констант.
Т.е. это уже вроде как реализация-поведение. Хотя спорно.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37712654
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123jabПрально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации.
ну, в Java ещё впихнули туда набор констант.
Т.е. это уже вроде как реализация-поведение. Хотя спорно.константы в интерфейсе всегда final. By design. Так что это не поведение - это чистые константы.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37712844
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA,
понятно, что это спорно - считать ли поведением, наделение объекта набором констант.
Для меня любые "величины" - поведение :)
afaik я только в Java это встретил. Могу ошибаться.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37713000
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123VoDA,
понятно, что это спорно - считать ли поведением, наделение объекта набором констант.
Для меня любые "величины" - поведение :)
afaik я только в Java это встретил. Могу ошибаться.В Scala вроде сохранено подобное поведение. Kotlin и Ceylon совместимы с java, значит и константы в интерфейсах должны поддерживать.

А вот в C# запрещено помещать константы в интерфейсы.

ИМХО это дело вкуса. Интерфейс это описание способа взаимодействия с подсистемой или либой.
Код: java
1.
2.
3.
interface Robot {
   public void turn(int side, int measure, int amount);
}

Как можно узнать какие константы нужно подставить в side и measure чтобы система выполнила поворот налево в 5 градусов?

Код: java
1.
2.
3.
4.
5.
6.
interface RobotConstants {
   int RIGHT = 1;
   int LEFT = 2;
   int DEGREES = 3;
   int RADIANS = 4;
}



И вот уже внешняя система может определиться и выполнить:
Код: java
1.
turn(RIGHT, DEGREES, 5);



Потому использовать интерфейсы как хранилище для констант взаимодействия с подсистемой вполне логично. В примере можно объединить Robot и RobotConstraints - возможно это также упростит использование такого кода.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37713032
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA,
у меня посыл другой.... Как у ФП.
Т.е. интерфейс это проводник-труба, процесс-меняющий данные.
В ФП - нет состояния. У интерфейса тоже нет.
Следовательно, повернуть на 5 град. неважно от чего.
Вот такие мысли 6-м чувством :)
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37713094
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123VoDA,
у меня посыл другой.... Как у ФП.
Т.е. интерфейс это проводник-труба, процесс-меняющий данные.
В ФП - нет состояния. У интерфейса тоже нет.
Следовательно, повернуть на 5 град. неважно от чего.
Вот такие мысли 6-м чувством :)Состояние - это то, что может измениться. Интерфейс не меняется, потому он как и функция в ФП не обладает состоянием ;)

Интерфейс как и функция может вызывать изменения где то еще - интерфейс в объекте, к которому этот "проводник-труба" подключен, а функция - выдает изменения в виде возвращаемого объекта.
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37713122
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Petro123!

> Т.е. интерфейс это проводник-труба, процесс-меняющий данные.
> В ФП - нет состояния. У интерфейса тоже нет.

Ну будет нужно писать getRight() вместо RIGHT - что поменяется?
Кроме того, что контрактом константы является её значение, а функции-
обещание в комментарии?

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37713139
mvn3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) абстрактный класс может содеражать реализацию методов, интерфейс - нет.
2) можно наледовать множество интерфейсов но только 1-н класс
3) как и говорили интерфейсы работают медленнее

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

есть нужно обеспечить просто единый интерфейс работы всех классов (у всех одинаковые имена но разная реализация, "полиморфизм интерфейса") но каждый имеет собственную реализацию - это интерфейс
...
Рейтинг: 0 / 0
В чем разница между абстрактным классом и интерфейсом?
    #37714262
valiantsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabПрально тут писали, что интерфейс это по сути контракт. Вообще интерфейс это более чистая реалзация абстракции. В нем могут быть только описания методов, но никогда не будет их реализации.
Ответ спорный - можно протроллить тем, что в теле интерфейса возможно поместить реализацию объявленного абстрактного метода через вложенный класс собственно реализующий этот интерфейс.
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем разница между абстрактным классом и интерфейсом?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]