Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 1 / 0
Регистрация: 19.11.2013
Сообщений: 29

Как правильно передать объект в метод и получить нужное возвращаемое значение

18.05.2019, 10:13. Показов 1995. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть суперкласс:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Str_240_1_Cycle {
        public void play() {
        System.out.println("Str_240_1_Cycle.play()");}
    
    public int wheels(Str_240_1_Cycle obj) {
        if (obj.equals(new Str_240_1_Bicycle())) {System.out.println("2"); return 2;}
            else 
                if (obj.equals(new Str_240_1_Trycycle())) {System.out.println("3"); return 3;}
                    else 
                        if (obj.equals(new Str_240_1_Unicycle())) {System.out.println("4"); return 4;}
                            else 
                                {System.out.println("0"); return 0;}
    }
}


Есть производные классы, это один из них:

Java
1
2
3
4
5
6
public class Str_240_1_Bicycle extends Str_240_1_Cycle {
    
    public void play() {
        System.out.println("Str_240_1_Bicycle");
    }
}


и выполнение:

Java
1
2
3
4
5
6
7
8
9
10
11
public class Str_240_1_Main {
            
        private static void ride(Str_240_1_Cycle obj) {
        obj.wheels(obj);    }
            
    public static void main(String[] args) {
            
        Str_240_1_Unicycle uni_ = new Str_240_1_Unicycle();
        ride(uni_);
    }
}


Почему я не получаю в консоль вывод "4", а выводится "0". Вроде бы должно выполняться условие
if (obj.equals(new Str_240_1_Unicycle())) {System.out.println("4"); return 4;}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2019, 10:13
Ответы с готовыми решениями:

Как передать объект в метод?
Есть два класса KvadYr и KvadYr2(Оба имеют методы с одинаковыми именами и параметрами, отличаются только формулы) в зависимости от того Б...

Метод isHeadlessInstance(). Возвращаемое значение
Класс: java.awt.GraphicsEnvironment. Метод: public boolean isHeadlessInstance(). Returns: true if a display, keyboard, and mouse can be...

Как передать нужное значение?
Снова туплю над задачкой. Подскажите если у кого есть какие мысли. function FunctionArray(count) { var arr = ; for (var...

7
230 / 199 / 71
Регистрация: 21.10.2016
Сообщений: 449
18.05.2019, 10:31
имхо, нужно переопределять метод equals();
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
18.05.2019, 11:15
Лучший ответ Сообщение было отмечено kolomimber как решение

Решение

тебе выше правильно подсказали про икавалс. У тебя собственно условие что если объект аргуемнт равен новому созданному объекту, а они не равны. Да и само условие странное. Если верно понимаю что ты хочешь сделать, то просто введи протектед переменную в супер-классе, равную 0, а в дочерних классах ее значение меняй, ставь 2, 3,4 какое где нужно. и тогда метод сведется к
Java
1
2
3
public int wheels(Str_240_1_Cycle obj) {
   return obj.getMyVariable();
}
1
2 / 1 / 0
Регистрация: 19.11.2013
Сообщений: 29
18.05.2019, 12:57  [ТС]
Welemir1, у меня снова вопрос, почему у наследников в методе getMyVariable() не возвращается переменная наследника? Ведь наследующий класс обладает всеми свойствами и методами базового класса...

Суперкласс:
Java
1
2
3
4
5
6
7
public class Str_240_1_Cycle {
    protected int var = 0;
    
    public int getMyVariable() {
        System.out.println("Переменная равна: " + var);
        return var; }
    }
Производный класс:
Java
1
2
3
public class Str_240_1_Unicycle extends Str_240_1_Cycle{
    protected int var = 3;
}
Выполнение:
Java
1
2
3
4
5
6
7
8
9
10
11
public class Str_240_1_Main {
            
        private static int wheels(Str_240_1_Cycle obj) {
        return obj.getMyVariable(); }
            
    public static void main(String[] args) {
            
        Str_240_1_Unicycle uni_ = new Str_240_1_Unicycle();
        wheels(uni_);
    }
}
Возвращает ноль, а не значение переменной наследника.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
18.05.2019, 13:12
Цитата Сообщение от kolomimber Посмотреть сообщение
Возвращает ноль, а не значение переменной наследника.
а ты зачем новую то переменную создал в наследниках? вот так можно например
Java
1
2
3
4
5
6
class Str_240_1_Unicycle extends Str_240_1_Cycle {
 
    public Str_240_1_Unicycle() {
        this.var = 3;
    }
}
а вообще открываем книгу по джава, штудируем наследование, протектед.

P.S. Что за имена классов? Это так в питоне имена дают, да и само имя какое то странное
1
2 / 1 / 0
Регистрация: 19.11.2013
Сообщений: 29
18.05.2019, 16:27  [ТС]
Welemir1, это и есть видоизмененная задача по Эккелю на 240-й странице. Но в 40 лет информация уже не воспринимается так, как раньше. Спасибо.
0
18.05.2019, 16:42

Не по теме:

Цитата Сообщение от kolomimber Посмотреть сообщение
Но в 40 лет информация уже не воспринимается так, как раньше.
поздновато ты решил войти в айти если честно

0
2 / 1 / 0
Регистрация: 19.11.2013
Сообщений: 29
18.05.2019, 18:56  [ТС]
Welemir1, это хобби. Я не витаю в облаках.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.05.2019, 18:56
Помогаю со студенческими работами здесь

Как передать возвращаемое значение в функции getY через указатель
Добрый вечер. Подскажите, как передать возвращаемое значение в функции getY через указатель #include <stdio.h> #include...

Как написать правильно: если возвращаемое запросом значение - пустое?
Как написать правильно: если возвращаемое значение - пустое ? if Query.FieldByName('Name').Value= ...

Асинхронный метод и возвращаемое значение: как реализовать эту логику?
Помогите реализовать такую логику: надо вызвать ReadData() с возвращаемым значением, но проблема в том, что await требует, чтобы метод был...

Как передать в DataTable нужное условие (а именно значение идентификатора пользователя)
Есть две таблицы Users(Id_User, Login, Pass) Files(Id_File, Id_User, File). Соответственно установлена связь между ними (многие ко...

Как получить значение, возвращаемое методом без параметров
Вообщем, делаю так: static string ffff() { try { return ""; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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