Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 05.07.2017
Сообщений: 8

Экземпляр абстрактного класса

06.07.2017, 04:09. Показов 2996. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если зугуглить по тегу "абстрактный класс", черным по белому будет написано "Создавать экземпляры абстрактного класса нельзя". А теперь кусок кода который точно работает, потому что писал его не я.

Java
1
2
3
4
5
6
7
8
9
import javax.swing.Timer; 
 
timer= new Timer( 1000 , new ActionListener(
    public void actionPerformed(ActionEvent ev) {
         System.out.println( "WOW!" );
    }
));
 
timer.start();
Как java может так бесчеловечно рушить мои о ней представления. Как такое вообще быть может "new ActionListener"? Создание экземпляра интерфейса. Это вообще законно?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2017, 04:09
Ответы с готовыми решениями:

Существует ли экземпляр класса?
Как определить, существует ли экземпляр класса? Есть класс-окно(extends JFrame). Надо определить, создан ли его экземпляр или нет (что бы...

Краш приложения при вызове метода из другого класса через экземпляр
Привет Хочу вызвать метод из другого класса. Для это создаю экземпляр этого класса через конструктор с параметрами и вызываю метод через...

Создать экземпляр одного класса в Main, и передать его в экземпляр другого класса
Добрый день. Подскажите пожалуйста. есть несколько классов-файлов в одном пакете. class one class two class main... Нужно...

13
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
06.07.2017, 05:43
Лучший ответ Сообщение было отмечено korvin_ как решение

Решение

Цитата Сообщение от ilyash550 Посмотреть сообщение
Это вообще законно?
Вполне себе законно. Это так называемые анонимные классы. Если ты обратишь внимание, при создании "ActionListener"-a, сразу же определяется реализация метода actionPerformed, этот метод должны реализовывать все классы, которые являются реализацией абстрактного класса "ActionListener". Грубо говоря, ты не создаёшь экземпляр абстрактного класса, ты создаёшь класс реализацию абстрактного класса "здесь и сейчас и один раз", не вынося создаваемый класс в отдельный файл и не давая ему имени(потому и собственно он анонимный), как делается обычно.

Кстати говоря, тоже самое можно делать и с интерфейсами. Можно вынести имплементацию интерфейса в отдельный файл классом, дать ему имя и использовать, а можно и "создать на ходу", просто определив методы интерфейса.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
06.07.2017, 12:16
Цитата Сообщение от ilyash550 Посмотреть сообщение
А теперь кусок кода который точно работает
не работает. синтаксис не верный
должно быть так:
Java
1
2
3
4
5
timer= new Timer( 1000 , new ActionListener() {
* * public void actionPerformed(ActionEvent ev) {
* * * * *System.out.println( "WOW!" );
* * }
});
0
1 / 1 / 0
Регистрация: 05.07.2017
Сообщений: 8
06.07.2017, 14:52  [ТС]
LeX, согласен)
dalay_lama, Про анонимные классы слышал и понимаю, что чтобы не писать лишний и ненужный код создается анонимный класс и оверрайдится на месте, не отходя от кассы. Но это знание не избавляет меня от чувства когнитивного диссонанса, так как в моем понимании интерфейс, без ошибок компиляции, может мирно сосуществовать только со словом implements, но ни как не new. Понятно что в "new ActionListener()" нет имени класса, так как он анонимный, это логично, но почему там нет слова implements мне не ясно, потому что это именно то что нужно делать с интерфейсами, реализовывать.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
06.07.2017, 15:12
Java
1
new Timer( 1000 , ev -> System.out.println( "WOW!" ));
profit
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
06.07.2017, 18:22
Цитата Сообщение от ilyash550 Посмотреть сообщение
так как в моем понимании интерфейс, без ошибок компиляции, может мирно сосуществовать только со словом implements
Расширяй понимание. В некоторых языках, например, никакого implements нет вообще. И я не про ключевое слово, а про само явного указание реализации интерфейса. Утиная типизация и всё такое.
0
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
07.07.2017, 05:12
Цитата Сообщение от ilyash550 Посмотреть сообщение
в моем понимании интерфейс, без ошибок компиляции, может мирно сосуществовать только со словом implements, но ни как не new
Не сочтите за грубость, но это как-то.....однобоко и узко что-ли

прислушайтесь к korvin_,
Цитата Сообщение от korvin_ Посмотреть сообщение
Расширяй понимание
Интерфейс - это всего лишь описание....или даже контракт того, что должен уметь делать класс, который его собирается имплементировать.

Цитата Сообщение от ilyash550 Посмотреть сообщение
Понятно что в "new ActionListener()" нет имени класса, так как он анонимный, это логично, но почему там нет слова implements
А зачем там слово implements? При создании/описании нового класса(сейчас я имею ввиду в классическом понимании создании, т.е. в отдельном файле, описываем класс) мы допустим хотим указать, что новосоздаваемый класс умеет делать всё тоже самое, что и такой-то интерфейс - это нужно как-то указать, вот мы и указываем это словом implements.

А когда мы создаём анонимный класс для интерфейса/абстрактного класса очевидно, что мы имплементируем/реализовываем указанный интерфейс/абстрактный класс, зачем там слово implement? всё равно что, масло масленое грубо говоря

Если простыми словами, когда ты пишешь "ActionListener listener = new ActionListener() {...}", ты говоришь "хей, я хочу создать объект listener, который будет имплементировать интерфейс ActionListener", java - "окей, без проблем, только у твоего объекта должен быть реализован метод actionPerformed, давай создадим анонимный класс, с реализацией этого метода и на основе этого класса, я тебе создам объект". И пишется конструкция, которая у тебя указана в старттопике. Когда ты такое напишешь и скомпилируешь, java этот твой аннонимный класс всё равно выделит в отдельный файл, как-будто если бы ты его описал в обычном стиле, с выносом в отдельный файл и с твоим любимым словом implements (Пусть здесь гуру меня поправят, я не силён в том, как java такие моменты обрабатывает, но думаю, что приблизительно это так и выглядит). В общем, в итоге, это почти тоже-самое, просто описывается по другому.

Цитата Сообщение от ilyash550 Посмотреть сообщение
потому что это именно то что нужно делать с интерфейсами, реализовывать
Так это собственно там и происходит, ты же описываешь, что делает метод интерфейса или что в твоём понимании "реализовывать"?
1
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
07.07.2017, 10:01
Цитата Сообщение от korvin_ Посмотреть сообщение
Утиная типизация и всё такое.
поддерживаю, жалко её в java скорее всего и не появится. ну по крайней мере в ближайших релизах
0
1 / 1 / 0
Регистрация: 05.07.2017
Сообщений: 8
07.07.2017, 15:06  [ТС]
dalay_lama, Кажется я начинаю понимать.
Учу язык по книге Сьерра, Бейтс - Изучаем Java. Язык не повернется сказать, что это плохая книга, потому что книга просто шикарная. Но в теме про внутренние классы был приведен пример простенькой анимации и фраза типа "мы привели этот пример лишь для демонстрации возможностей внутреннего класса, вряд ли вы будете создавать игры". Ирония в том, что это как раз то, чем я бы и хотел заниматься, в контексте программирования. Написание приложений и игр. Но там по этой теме голяк. В ютубе я нашел несколько подробных уроков, но без теор базы они не сильно то и полезны. Есть ли какая-то книга или сборник статей касательно этой тематики? Стратегия буферизации,работа со спрайтами, многопоточность и т.д? Пытаюсь учить кусками то тут то там и знаний вроде прибавляется, в чужом коде все меньше незнакомых слов и конструкций, но полной картины не выстраивается. Звенья есть, но цепь сделать не могу. Я инженер электрик и не собираюсь этим на хлеб зарабатывать, по крайней мере пока не собираюсь, но я ОЧЕНЬ хочу разобраться в этом. Есть на примете какие либо источники информации? Буду очень благодарен.

Добавлено через 16 минут
Я к тому клоню, что много людей, реально очень много, занимаются созданием игр и приложений. Но я не нашел действительно исчерпывающего источника на эту тему и это странно. Например, очень много людей покупают квадрокоптеры, но делают их единицы и тем не менее есть куча инфы о том как его собрать с нуля (DIY), так подробно что повторить (и понять большую часть) сможет даже гуманитарий. То же касательно ЛБП, как часто вы видели самодельные лабораторные блики питания? И таких примеров масса, когда существует много информации на весьма специфическую тематику. А теперь взгляните на AppStore, iTunes, Steam и пр. Там же пруд пруди игр и приложений, и пишут их все кому не лень. Как они это делают и что я делаю не так? Или нужно просто набрать критическую массу знаний и этот процесс станет на столько очевидным, что не понадобится доп информация?
0
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
07.07.2017, 16:20
ilyash550, к сожалению я никогда не занимался разработкой игр, на работе я в основном занимаюсь созданием серверных и desktop приложений, да и честно говоря не читал не одной книжке по java, но я до этого изучал c++ и понимание основ ООП у меня было, поэтому я учился на примере статей в интернете и документации к библиотеками.

На вашем месте я бы пока не брался за разработку игр, все таки для создания такого рода приложений нужно хорошо плавать в этой теме, а судя по вашему вопросу старт-топика вы только начали изучать java, поэтому логично было бы быть последовательным. Изучите основы, я так понимаю у вас не возникает вопросов что такое функция, переменная, массив? Если да то расширяйте понимание ООП наследование/полиморфизм/инкапсуляция, изучите настолько глубоко, чтобы вас не пугали конструкции такого вида, которые были в вашем вопросе. После, изучайте основные моменты, которые сейчас используются во всех современных приложениях: работа с СУБД, чтение внешних файлов и т.д. попробуйте создать приложение с графическим интерфейсом, я бы для создания графических приложений я бы посоветовал использовать javafx т.к. если мне не изменяет память его же можно и использовать для создания android приложений там же можно будет и попрактиковаться в многопоточности(обновление в фоне и т.д.)....так же изучайте паттерны программирования. Очень советую поиграться со spring-ом + различные ORM библиотеки(но это уже когда будете уверено чувствовать себя в java).

Конечно, можно и сразу начать пытаться писать игры по примерам (youtube, хабр, статьи), но думается мне большинство вещей вам будет казаться магией и не будет понимания того, как это работает, отсюда и будут проблемы рода, что когда что-то понадобится, чего не было описано в источнике вдохновения вы застрянете и даже не будете знать с какой стороны копать и будут появляться нелепые посты на этом форуме но если вы хорошо будете знать основы, вы хотябы сможете правильно формировать вопросы Гуглу/форуму

В общем, моя мысль - идите от простого к сложному, последовательно. А по поводу литературы, здесь на форуме уже давным давно лежит список от новичков до профи, смотрите в разделе java, люди специально для вас старались)
0
1 / 1 / 0
Регистрация: 05.07.2017
Сообщений: 8
07.07.2017, 17:59  [ТС]
dalay_lama, Спасибо за отзывчивость, буду стараться. Проблема в том, что в процессе муторного, нудного изучения материала без должной практики интерес теряется. Начал изучать java в октябре и менее чем через месяц завяз в теории. Я вроде бы все понимаю, но в то же время отдаю себе отчет о том, что это не столько понимание сколько знания и фундамент очень хрупок. Не зная как реализовать эти знания на практике энтузиазм терялся и я попросту забил. Недавно защитился и так сложилось, что моя работа была связана с программированием микроконтроллеров (pic 16). Мне понравилось, я решил поглубже в этом порыться, кое что сделал на ардуино. Заказал кучу ништяков с али и пока жду посылку решил поучить десктопное программирование. И вот опять, те же грабли.
0
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
07.07.2017, 18:35
ilyash550, да, понимаю вас, той же проблемой страдаю, вроде бы и хочется что-то новое изучить но без конкретной задачи это таким остаётся на уровне хотелки, мне работа помогает.
Попробуйте самому себе задачу придумать. Допустим тот же todo лист, начните с консольного приложения, напишите программу, которая будет запрашивать ввод наименования задачи и сохранять её в массив, чтобы была возможность просмотреть список введенных задач, добавить новую, удалить и т.п.. потом развивайте эту задачу, сделайте так, чтобы программа могла считвать из файла и сохранять туда же введенные задачи, в xml формате. Потом нарисуйте графический интерфейс для этого, потом перенесите сохранение из файла в какую-нибудь СУБД и т.д. и т.п. По ходу выполнения этого, вы освоете основные принципы и дальше будет проще разбираться с более сложными вещами
0
1 / 1 / 0
Регистрация: 05.07.2017
Сообщений: 8
07.07.2017, 19:18  [ТС]
dalay_lama, это я легко сделаю. Консоль - пройденный этап, чтение и запись в файл .txt могу реализовать с помощью объектов Scanner и Formatter, на днях чисто ради прикола, после того как заново повторил JFrame (в октябре я про него читал но почти все забыл) написал крестики нолики c guy. java.swing. Основы и концепцию ООП вроде понял (если сравнивать с процедурным стилем - еще как понял), инкапсуляция, полиморфизм, наследование - с эти тоже вроде понятно. Кое как понял потоки, BufferStrategy и Timer который из java.swing, собственно оверрайд анонимного класса меня сюда и привел. Хотя вот тут тоже есть нюанс, не понимаю в чем разница создания таймера через реализацию интерфейса Runnable и наследованием Thread. Единственное что уловил - если наследовать то можно в конструкторе "инициализировать" таймер (не уверен, что это корректное выражение). В обоих вариантах нужен метод run() и в обоих вариантах нужно будет создавать экземпляр класса. В чем разница и зачем нужно 2 способа - не понял.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
07.07.2017, 22:01
Цитата Сообщение от ilyash550 Посмотреть сообщение
Спасибо за отзывчивость, буду стараться. Проблема в том, что в процессе муторного, нудного изучения материала без должной практики интерес теряется. Начал изучать java в октябре и менее чем через месяц завяз в теории. Я вроде бы все понимаю, но в то же время отдаю себе отчет о том, что это не столько понимание сколько знания и фундамент очень хрупок. Не зная как реализовать эти знания на практике энтузиазм терялся и я попросту забил.
На кой черт ты тогда взялся за Java? Найди задачу и решай её.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.07.2017, 22:01
Помогаю со студенческими работами здесь

Наследование от абстрактного класса
Приветствую. Есть несколько классов, и у них есть операция сложения. При этом каждый метод своего класса возвращает объект этого же класса....

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

Пример интерфейса, абстрактного класса и метода
Приведите, пожалуйста, жизненные примеры интерфейса, абстрактного класса и метода

Передача параметров методу абстрактного класса с интерфейсом
Доброго времени суток!У меня есть интерфейс с методом T create( T Object ); есть абстрактный класс,который наследует этот интерфейс там я...

Приведение массива экземпляров абстрактного класса к массиву интерфейсов
Имеется интерфейс public interface IObject { public void doSomething(); public IObject getParent(); public IObject ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru