Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511

Убрать лишний метод из подкласса

08.06.2016, 16:04. Показов 2380. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как поступают в таких случаях, когда, к примеру, есть класс Ключ, у него куча методов, один из которых Повернуть, класс ЭлектронныйКлюч наследуется от Ключ, но электронные ключи не поворачивают, чтобы открыть дверь. Как можно в классе ЭлектронныйКлюч убрать метод Повернуть?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.06.2016, 16:04
Ответы с готовыми решениями:

Переопределить метод toString для подкласса
Допустим есть класс Car: import java.lang.reflect.*; public class Car implements Comparable<Car>{ private String mark; private...

Переопределить метод интерфейса Comparable для подкласса
Медленными шагами развиваюсь по книге Хорстмана и Корнелла, наткнулся на такую проблему: У меня есть следующие классы: Pet import...

убрать лишний ентер
Здравствуйте есть код $suw = ' 10'; $fp = fopen('1.txt', 'a+'); fwrite($fp, $fio . $suw ."\r\n"); fclose($fpp); все в порядке...

23
 Аватар для ninjacut
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
08.06.2016, 16:15
Один вариант - вынести в отдельный интерфейс метод, другой - @Override этого метода с пустым телом.
1
27 / 27 / 24
Регистрация: 23.04.2011
Сообщений: 64
08.06.2016, 16:20
Можно установить методу Повернуть уровень доступа private, и тогда он будет доступен лишь классу Ключ
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
08.06.2016, 16:26  [ТС]
Цитата Сообщение от ninjacut Посмотреть сообщение
Один вариант - вынести в отдельный интерфейс метод, другой - @Override этого метода с пустым телом.
Я бы хотел как то без дополнительных интерфейсов. Переопределить тоже не подходит, так как суть в том и есть, чтобы при создании экземпляра класса ЭлектронныйКлюч среда разработки даже не подсказывала о существовании метода Повернуть.
Цитата Сообщение от Igor100 Посмотреть сообщение
Можно установить методу Повернуть уровень доступа private, и тогда он будет доступен лишь классу Ключ
От класса Ключ наследуется не только ЭлектронныйКлюч, но и другие классы, в которых метод Повернуть должен быть.
0
27 / 27 / 24
Регистрация: 23.04.2011
Сообщений: 64
08.06.2016, 16:59
Тогда такой вариант:
Вынести класс Ключ в отдельный пакет (Package), методу Повернуть установить уровень доступа по умолчанию, после чего в файле класса ЭлектронныйКлюч, импортировать класс Ключ (import), теперь метод Повернуть не будет виден в подклассе.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.06.2016, 17:10
zuxa-zuxa, если у класса ключ есть не приватный метод, он будет виден наследникам. Если вам это не подходит, стройте другую архитектуру. Правильное решение в данном случае - интерфейс или общий абстрактный класс...зависит от остальных требований \ ограничений
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
09.06.2016, 19:55  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Правильное решение в данном случае - интерфейс или общий абстрактный класс
И как через абстрактный класс или интерфейс это делать?
Что интерфейс, что абстрактный класс требует модификатора public. Пробовал в абстрактном классе и методы делать абстрактными, всё равно ошибка.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
09.06.2016, 20:10
совсем упрощенно
Java
1
2
3
4
5
6
abstract class Keys {
abstract void rotate();
}
class eKey extends Keys {
void rotate() {print("данный метод не применим")};
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.06.2016, 20:16
Базовый класс ключ. В нем общие методы для всех типов ключей. Метод повернуть реализовать в классе "Механический ключ" который наследует от базового. Электронный ключ так же наследует от базового и реализует свои методы. Метода "повернуть" там не будет

Добавлено через 48 секунд
SergioO,

Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
чтобы при создании экземпляра класса ЭлектронныйКлюч среда разработки даже не подсказывала о существовании метода Повернуть.
отвечаете не читая?
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
09.06.2016, 20:22
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
отвечаете не читая?
первое сообщение и дальше только ответы
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
чтобы при создании экземпляра класса ЭлектронныйКлюч среда разработки даже не подсказывала
никак
создать class BasicKey, в котором не будет никаких ротейт, от него два потомка eKey и mKey
1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.06.2016, 20:24
Цитата Сообщение от SergioO Посмотреть сообщение
первое сообщение
и его похоже через строчку...как и все последующие...
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
09.06.2016, 20:30
KEKCoGEN, 1 сообщение + вот последние сообщение топик стартера, на которое я отвечал,

Не по теме:

... слов нет - тебе заняться нечем?


Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
И как через абстрактный класс или интерфейс это делать?
Что интерфейс, что абстрактный класс требует модификатора public. Пробовал в абстрактном классе и методы делать абстрактными, всё равно ошибка.
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
09.06.2016, 21:08  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Базовый класс ключ. В нем общие методы для всех типов ключей. Метод повернуть реализовать в классе "Механический ключ" который наследует от базового. Электронный ключ так же наследует от базового и реализует свои методы. Метода "повернуть" там не будет
Ну вот к примеру ситуация:
1 программист создал базовый класс Ключ, в котором, к примеру, 100 методов. Потом он создал электронный ключ, в котором реализовал 10 методов, остальные - для других ключей и их реализация осталась с базового класса.
Другой программист реализует какую то задачу, проект современного дома к примру... Там все ключи электронные. Так вот этот Другой программист создаёт экземпляр класса ЭлектронныйКлюч, до других ключей ему нет дела. А среда разработки показывает ему о наличии 100 методов, не правильно. Я думаю как то это правильно делается...

Добавлено через 21 минуту
Может плохо объясняю?
Есть класс A, в котором public поля int q; и String w;
Ну вот когда пишем int i = (new A). ставим точку, то среда разработки подсказывает нам только доступные варианты, то есть только поле q. Предложение написать после точки строковую переменную w не будет. Аналогично и с этими ключами нужно
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.06.2016, 21:31
Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
Так вот этот Другой программист создаёт экземпляр класса ЭлектронныйКлюч, до других ключей ему нет дела. А среда разработки показывает ему о наличии 100 методов
в таком случае второй программист ошибочно наследовал свой класс ибо либо ему нужны методы в базовом классе (или не ему а внешней программе которая работает с ключами), либо ему нестоит наследовать свой класс от базового если нет общего функционала.

Конечно может быть ему не нужны все 100 методов, однако обратите внимание, что у каждого вашего и вообще любого объекта есть метод notify(), который приходит из класса Object. Недумаю что вы всегда его используете, однако он есть и с этим ничего не поделаешь. Так же и в вашем примере.
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
09.06.2016, 21:36  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
в таком случае второй программист ошибочно наследовал свой класс ибо либо ему нужны методы в базовом классе (или не ему а внешней программе которая работает с ключами), либо ему нестоит наследовать свой класс от базового если нет общего функционала.
Второй программист никуда ничего не наследует, он просто хочет использовать готовые классы, которые ему написал первый программист. Внутрь их лезть не хочет. Ему нужно просто использовать эти классы, а чтобы он случайно не наделал методов, которых быть не может, их нужно как то убрать
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.06.2016, 22:05
Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
Ему нужно просто использовать эти классы
так использовать или наследовать? Вы уж определитесь как нибудь...
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
09.06.2016, 22:29  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
так использовать или наследовать? Вы уж определитесь как нибудь...
Я как бы в роли Программиста №1. Я должен создать класс ЭлектронныйКлюч, наследовав его от ключ, да так, чтобы любой другой человек мог хорошо использовать мой класс, во как
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.06.2016, 22:32
zuxa-zuxa, если у класса ключ есть метод "повернуть" то в данном случае это неверная архитектура и ваш вариант это сделать как предложил SergioO (можно выкинуть исключение вместо вывода сообщения на экран)
1
3 / 2 / 1
Регистрация: 24.06.2016
Сообщений: 63
24.06.2016, 16:28
Я новичок из новичков и возможно сейчас сморозну чушь, но может поменять родителя и дочерний классы местами. Т.е. сделать Электронный ключ, от него унаследовать Ключ и расширить методом повернуть, потом все остальные наследовать от Ключа?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.06.2016, 17:07
Цитата Сообщение от GLaD0S Посмотреть сообщение
Т.е. сделать Электронный ключ, от него унаследовать Ключ и расширить методом повернуть, потом все остальные наследовать от Ключа?
тогда все ваши ключи будут электронными что неправильно. Наследование это транзитивное свойство.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2016, 17:07
Помогаю со студенческими работами здесь

Убрать лишний элемент
Есть товар в каталоге - http://elamed.com/catalog/catalog/magnitoterapiya-magnitoterapiya-v-domashnikh-usloviyakh/tovar-6 Нужно убрать из...

Убрать лишний отступ
У меня два span и все они не одинаковы выравниваются а по разному. Второй span вышел вправо примерно на 10px Вот код на html ...

Убрать лишний текст
как убрать лишний текст что бы осталось только? <xml> <source> <ip>127.0.0.1</ip> <login>postgres</login>...

Убрать лишний цикл foreach
Есть такой скрипт : $link_val_scl=array();$i = 0; foreach($content->find('table a.scorelink') as $val_link){ $link_scl =...

Как убрать лишний текст
Добрый вечер форумчане, следующая ситуацию: Я подсасываю некоторые данные со стороннего сайта, а конкретнее количество игроков. Беру я их...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru