Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/326: Рейтинг темы: голосов - 326, средняя оценка - 4.97
 Аватар для androidos
29 / 27 / 5
Регистрация: 07.07.2011
Сообщений: 782

Extends и Implements - определения

10.01.2012, 19:48. Показов 66425. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите пжл что означают эти слова и в чём разница между ними? Только по-простому объясните.
Спасибо

Добавлено через 3 минуты
Я думал, что EXTENDS - используется для определения интерфейсов, а IMPLEMENTS - для абстрактн. классов. Так или нет?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2012, 19:48
Ответы с готовыми решениями:

implements, extends
Всем привет. Вот конструкция: class MyGenClass<T extends Comparable<T>> Почему мы при параметризации должны писать extends, а не...

Implements Runnable
Необходимо создать 10 треугольников и реализовать анимацию для них (простое движение сверху вниз). Triangle.java package aectann; ...

implements InteratorAggregate
Взялся за интерации, списал код с руководства по php5: <?php class Myclass implements InteratorAggregate // объявлен класс с...

21
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
10.01.2012, 19:52
Лучший ответ Сообщение было отмечено как решение

Решение

androidos, ну если вкратце: extends - это ключевое слово для наследования от определенного класса
Java
1
2
3
4
class ChildClass extends ParentClass
{}
class ParentClass
{}
implements - для реализации в классе интерфейса
Java
1
2
3
4
ChildClass implements SomeInterface
{}
interface Callback
{}
11
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.01.2012, 19:53
Лучший ответ Сообщение было отмечено как решение

Решение

androidos, extends - расширяет класс. Говоря простыми словами - это наследование класса. В Java класс может наследоваться только от одного класса.
implements - реализует интерфейс, т.е. обязывает реализовать внутри класса все методы, описанные в интерфейсе. Один класс может реализовывать несколько интерфейсов

Интерфейс, как и базовый класс при наследование, является супертипом для этого класса
10
 Аватар для androidos
29 / 27 / 5
Регистрация: 07.07.2011
Сообщений: 782
10.01.2012, 21:43  [ТС]
Спасибо народ!
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
12.01.2012, 09:11
вообще я бы не стал, как программист завязывать на разделении этих понятий.
ведь фраза
implements - реализует интерфейс, т.е. обязывает реализовать внутри класса все методы, описанные в интерфейсе.
не верна (есть слово implements, а реализации нет.):
Java
1
2
3
4
5
interface I1 {
    void doIt();
}
abstract class a1 implements I1 {
}
Так что можно считать что implements и extends тоже самое, но нужно чтобы программист читающий код видел, что есть что: что интерфейс, что базовый класс
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
12.01.2012, 14:53
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от turbanoff Посмотреть сообщение
не верна (есть слово implements, а реализации нет.):
вы бы хоть тогда полную картину озвучивали чтоли, человек же просил по простому - если уж углубляться то не кусочком, а полностью:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Abstractions {
 
    interface AAA {
        void ale();
    }
 
    static abstract class BBB implements AAA {
        abstract void op();
    }
 
    static class CCC extends BBB {
 
        @Override
        public void ale() {
 
        }
 
        @Override
        void op() {
 
        }
    }
}
И упомянуть про то что вашу абстрактную реализацию интерфейса таже невозможно инстанснуть как и интерфейс.
И про то что основное различие интерфейса и абстрактного класса какраз в наследовании: имплементить можно много, а унаследовать только один абстракт
5
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
12.01.2012, 15:09
Цитата Сообщение от mutagen Посмотреть сообщение
вы бы хоть тогда полную картину озвучивали чтоли, человек же просил по простому - если уж углубляться то не кусочком, а полностью:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Abstractions {
 
    interface AAA {
        void ale();
    }
 
    static abstract class BBB implements AAA {
        abstract void op();
    }
 
    static class CCC extends BBB {
 
        @Override
        public void ale() {
 
        }
 
        @Override
        void op() {
 
        }
    }
}
И упомянуть про то что вашу абстрактную реализацию интерфейса таже невозможно инстанснуть как и интерфейс.
И про то что основное различие интерфейса и абстрактного класса какраз в наследовании: имплементить можно много, а унаследовать только один абстракт
А разве не обязательно реализовать метод ale в class BBB который имплементит интерфейс AAA?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
12.01.2012, 15:10
Цитата Сообщение от jvov Посмотреть сообщение
А разве не обязательно реализовать метод ale в class BBB который имплементит интерфейс AAA?
нет - он абстрактный, в нем можно и не реализовывать.
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
12.01.2012, 15:11
Цитата Сообщение от turbanoff Посмотреть сообщение
нет - он абстрактный, в нем можно и не реализовывать.
А точно, не заметил.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
12.01.2012, 15:13
Цитата Сообщение от mutagen Посмотреть сообщение
вы бы хоть тогда полную картину озвучивали чтоли
"Полную картину" - TC не нужно было, а я лишь указывал на неточности предыдущих ответов.
суть в:
я бы не стал, как программист завязывать на разделении этих понятий.
Так что можно считать что implements и extends тоже самое, но нужно для того чтобы программист читающий код видел, что есть что: что интерфейс, что базовый класс
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
12.01.2012, 15:17
Цитата Сообщение от turbanoff Посмотреть сообщение
Так что можно считать что implements и extends тоже самое, но нужно для того чтобы программист читающий код видел, что есть что: что интерфейс, что базовый класс
ну и опять мы взяли всё и смешали )))
давайте пойдём по шагам:
1. есть 2 интерфейса берём и implements Interface1, Interface2 //всё ок
2. есть 2 класса (и неважно абстрактных или нет), берём и extends Class1,Class2 // oops не вышло!
вот вам и повод не мешать всё в кучу
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
12.01.2012, 15:24
Цитата Сообщение от mutagen Посмотреть сообщение
ну и опять мы взяли всё и смешали )))
давайте пойдём по шагам:
1. есть 2 интерфейса берём и implements Interface1, Interface2 //всё ок
2. есть 2 класса (и неважно абстрактных или нет), берём и extends Class1,Class2 // oops не вышло!
вот вам и повод не мешать всё в кучу
TC просил объяснить, чем отличаются слова, и в чем их назначение.
в моем ответе содержалось указание на то что после implements указываются интерфейсы, в после extends классы.

А знание о том, что в Java нет множественного наследования классов, это уже дело третье.

Так что мой ответ был предельно точным - указывал на ошибки других, и давал только ту информацию, которую спрашивал TC.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
12.01.2012, 15:24
Цитата Сообщение от turbanoff Посмотреть сообщение
вообще я бы не стал, как программист завязывать на разделении этих понятий.
ведь фраза

не верна (есть слово implements, а реализации нет.):
Java
1
2
3
4
5
interface I1 {
    void doIt();
}
abstract class a1 implements I1 {
}
Так что можно считать что implements и extends тоже самое, но нужно чтобы программист читающий код видел, что есть что: что интерфейс, что базовый класс
это все, конечно, отлично, но как вы объясните сей код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
interface Interface {
    void intefaceMethod();
}
 
abstract class Class implements Interface {
    abstract void classVirtualMethod();
 
    void classMethod() {
    }
}
 
class ClassImpl extends Class {
 
    @Override
    public void intefaceMethod() {
 
    }
 
    @Override
    void classVirtualMethod() {
 
    }
}
здесь так же эквивалентны эти два понятия? Или все же разница намного больше, чем просто указание на класс/интерфейс? Или все же эти слова указывают, где же все таки идет расширение функционала, а где только реализация? Так что я, как программист, не стал бы считать их эквивалентными
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
12.01.2012, 15:29
Цитата Сообщение от M128K145 Посмотреть сообщение
эздесь так же эквивалентны эти два понятия? Или все же разница намного больше, чем просто указание на класс/интерфейс? Или все же эти слова указывают, где же все таки идет расширение функционала, а где только реализация? Так что я, как программист, не стал бы считать их эквивалентными
не уловил сути подвоха.
мы же различаем вопросы: отличия слов extends и implements, и различия классов и интерфейсов
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
12.01.2012, 15:41
turbanoff, в своем примере вы опустили класс почти до уровня обычного интерфейса, т.е. до того уровня, где разница между этими понятиями мало заметна(но, тем не менее, она есть).
Я же показал смысл extends и его отличие от implements.
При implements - мы обязываем реализовывать существующий набор методов.
При extends абстрактного класса мы не просто обязываем реализовывать существующий набор абстрактных методов, но мы так же можем управлять уровнями доступа этих методов, а так же использовать в наследнике уже реализованные методы из класса наследника.
Т.е. в первом случае идет только реализация, а во втором не только реализация, но также возможно и расширение функционала базового класса.

Также посмотрите на такой вариант
Java
1
2
3
4
5
6
7
interface BaseInterface {
    void baseMethod();
}
 
interface Interface extends BaseInterface {
    void intefaceMethod();
}
на что указывает слово extends? На то, что после него указан класс? Или все же таки расширение набора методов? Код вполне валиден, можете проверить. О корректности вашей фразы
Цитата Сообщение от turbanoff Посмотреть сообщение
после implements указываются интерфейсы, в после extends классы.
можете ответить самостоятельно
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
12.01.2012, 15:56
о, точно) давно не наследовал интерфейсы, хороший пример. Надо как-то переформулировать тогда.
При implements - мы обязываем реализовывать существующий набор методов.
это как-то не правильно/не точно.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
12.01.2012, 16:02
Цитата Сообщение от turbanoff Посмотреть сообщение
это как-то не правильно/не точно.
почему же? Мы именно обязываем. В случае абстрактного класса - это обязанность переходит по наследству в связи с абстрактностью предка
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.01.2012, 01:30
Цитата Сообщение от turbanoff Посмотреть сообщение
это как-то не правильно/не точно.
Даже Гослинг в своей книге довольно прозрачно намекнул что интерфейсы являются обязывающими инструкциями
<<<<<
Глава 4
ИНТЕРФЕЙСЫ
“Дирижирование” — это когда вы рисуете
свои “проекты” прямо в воздухе, палочкой или руками,
и нарисованное становится “инструкциями” для парней в галстуках, которые в данный момент предпочли бы
оказаться где-нибудь на рыбалке.
Фрэнк Заппа
>>>>>
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
13.01.2012, 07:27
Цитата Сообщение от mutagen Посмотреть сообщение
Даже Гослинг в своей книге довольно прозрачно намекнул что интерфейсы являются обязывающими инструкциями
ну опять вы смешиваете слово implements и саму суть интерфейсов.

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

тогда что такое implements?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.01.2012, 21:12
Цитата Сообщение от turbanoff Посмотреть сообщение
тогда что такое implements?
Interface это:
1. Инструкции босса подчинённому.
2. способ отфильтровать доступные методы до какой либо унификации
3. способ сказать JVM что вы от неё хотите что-то специфическое (например сериализацию)
4. Создать контейнер для констант(хотя для этого лучше enum).
5. Сымитировать множественное наследование.
implements это:
взять на себя одно или более из перечисленных свойств Interface и либо реализовать необходимое, либо воспользоваться плюшками

Мы вообще погрузились в какой то холивар ООП, думаю основное чем руководствовался Гослинг при создании такой конструкции как Интерфейс была попытка одним выстрелом отбиться от проблем множественного наследования с++ и добавить указывающий перст для тех кто пониже в иерархии разработки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2012, 21:12
Помогаю со студенческими работами здесь

Что такое Implements и как его юзать?
Собственно вопрос уже задан: Что такое Implements и зачем он вообще нужен?

extends
Я вот читаю про ООП в PHP. Там написано, что extends говорит, что этот класс расширяет тот, класс, &quot;от которого он extends&quot;. Вот...

extends
Здравствуйте у меян такой вопрос мб кто нибудь знает. Допустим есть 2 класса class t1 { } class t2 extends t1 {}

Для чего абстрактный класс, интерфейс и что такое implements
В общем топик замысловатый, но вопрос простой: учу потихоньку ООП всё глубже и глубже и столкнулся с проблемой понимая 3 разных слов:...

Jinja2 extends
Добрый день! Подскажите, использую базовый шаблон html-страницы для создания новых путем расширения через extends Дело в том, что в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru