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

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

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

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

Добавлено через 3 минуты
Я думал, что EXTENDS - используется для определения интерфейсов, а IMPLEMENTS - для абстрактн. классов. Так или нет?
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2012, 19:48
Ответы с готовыми решениями:

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

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

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

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

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

Решение

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Эксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.01.2012, 19:53 3
Лучший ответ Сообщение было отмечено как решение

Решение

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

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

Решение

Цитата Сообщение от 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 7
Цитата Сообщение от 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
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.01.2012, 15:10 8
Цитата Сообщение от jvov Посмотреть сообщение
А разве не обязательно реализовать метод ale в class BBB который имплементит интерфейс AAA?
нет - он абстрактный, в нем можно и не реализовывать.
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
12.01.2012, 15:11 9
Цитата Сообщение от turbanoff Посмотреть сообщение
нет - он абстрактный, в нем можно и не реализовывать.
А точно, не заметил.
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.01.2012, 15:13 10
Цитата Сообщение от mutagen Посмотреть сообщение
вы бы хоть тогда полную картину озвучивали чтоли
"Полную картину" - TC не нужно было, а я лишь указывал на неточности предыдущих ответов.
суть в:
я бы не стал, как программист завязывать на разделении этих понятий.
Так что можно считать что implements и extends тоже самое, но нужно для того чтобы программист читающий код видел, что есть что: что интерфейс, что базовый класс
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
12.01.2012, 15:17 11
Цитата Сообщение от turbanoff Посмотреть сообщение
Так что можно считать что implements и extends тоже самое, но нужно для того чтобы программист читающий код видел, что есть что: что интерфейс, что базовый класс
ну и опять мы взяли всё и смешали )))
давайте пойдём по шагам:
1. есть 2 интерфейса берём и implements Interface1, Interface2 //всё ок
2. есть 2 класса (и неважно абстрактных или нет), берём и extends Class1,Class2 // oops не вышло!
вот вам и повод не мешать всё в кучу
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.01.2012, 15:24 12
Цитата Сообщение от mutagen Посмотреть сообщение
ну и опять мы взяли всё и смешали )))
давайте пойдём по шагам:
1. есть 2 интерфейса берём и implements Interface1, Interface2 //всё ок
2. есть 2 класса (и неважно абстрактных или нет), берём и extends Class1,Class2 // oops не вышло!
вот вам и повод не мешать всё в кучу
TC просил объяснить, чем отличаются слова, и в чем их назначение.
в моем ответе содержалось указание на то что после implements указываются интерфейсы, в после extends классы.

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

Так что мой ответ был предельно точным - указывал на ошибки других, и давал только ту информацию, которую спрашивал TC.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
12.01.2012, 15:24 13
Цитата Сообщение от 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
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.01.2012, 15:29 14
Цитата Сообщение от M128K145 Посмотреть сообщение
эздесь так же эквивалентны эти два понятия? Или все же разница намного больше, чем просто указание на класс/интерфейс? Или все же эти слова указывают, где же все таки идет расширение функционала, а где только реализация? Так что я, как программист, не стал бы считать их эквивалентными
не уловил сути подвоха.
мы же различаем вопросы: отличия слов extends и implements, и различия классов и интерфейсов
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
12.01.2012, 15:41 15
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
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.01.2012, 15:56 16
о, точно) давно не наследовал интерфейсы, хороший пример. Надо как-то переформулировать тогда.
При implements - мы обязываем реализовывать существующий набор методов.
это как-то не правильно/не точно.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
12.01.2012, 16:02 17
Цитата Сообщение от turbanoff Посмотреть сообщение
это как-то не правильно/не точно.
почему же? Мы именно обязываем. В случае абстрактного класса - это обязанность переходит по наследству в связи с абстрактностью предка
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.01.2012, 01:30 18
Цитата Сообщение от turbanoff Посмотреть сообщение
это как-то не правильно/не точно.
Даже Гослинг в своей книге довольно прозрачно намекнул что интерфейсы являются обязывающими инструкциями
<<<<<
Глава 4
ИНТЕРФЕЙСЫ
“Дирижирование” — это когда вы рисуете
свои “проекты” прямо в воздухе, палочкой или руками,
и нарисованное становится “инструкциями” для парней в галстуках, которые в данный момент предпочли бы
оказаться где-нибудь на рыбалке.
Фрэнк Заппа
>>>>>
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
13.01.2012, 07:27 19
Цитата Сообщение от mutagen Посмотреть сообщение
Даже Гослинг в своей книге довольно прозрачно намекнул что интерфейсы являются обязывающими инструкциями
ну опять вы смешиваете слово implements и саму суть интерфейсов.

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

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

Мы вообще погрузились в какой то холивар ООП, думаю основное чем руководствовался Гослинг при создании такой конструкции как Интерфейс была попытка одним выстрелом отбиться от проблем множественного наследования с++ и добавить указывающий перст для тех кто пониже в иерархии разработки.
1
13.01.2012, 21:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2012, 21:12
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru