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

Создание метода в классе, относящемуся к другому классу

07.05.2019, 12:34. Показов 1395. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех.
У меня возникла проблема, изучаю сейчас JAVA, о никак не могу понять что и как происходит и что и как нужно гуглить.
В двух словах задача следующая:
Есть класс Human, и есть класс Taxi в котором должен быть водитель и 4 пассажира.
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 Human {
    String forename,name;
 
    public String getName(){
        return name+" "+forename;
    }
 
    public String getForename(){
        return forename;
    }
 
    public Human(String fona, String na) {
        this.forename=fona;
        this.name=na;
    }
 
 
    @Override
    public String toString(){
        return this.name + this.forename;
    }
 
}
Затем нужно создать класс такси, где должен быть водитель.
Методом тыка и поиска в интернете я создал водителя это строкой
Java
1
private Human driver;//что это такое? можете объяснить?
но мои попытки найти объяснение этого синтаксиса не увенчались успехом. Кто может мне объяснить синтаксис и значение этой строки?

Затем необходимо создать метод спрашивающий имя и фамилию водителя для этого я сделал вот такой метод
Java
1
2
3
public String getDrivername( ) {
        return driver.name + " " + driver.forename;
    }
но вылезает ошибка что переменные находятся в классе Human, но ведь я уже создал экземпляр класса Human и назвал его driver, почему я не могу пользоваться переменными из другого класса????

Как то так, код навсякий случай прикрепляю весь, потому что не понимаю в чем ошибка...

Пока на этом все)
Заранее спасибо за любую помощь

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.ArrayList;
 
public class Taxi {
    String drivername;
 
    private Human driver;//что это такое? можете объяснить?
 
    public Taxi(Human driver) {    //это конструктор создающий объект "driver"
        this.driver = driver;
    }
 
  public String getDrivername( ) {
        return driver.name + " " + driver.forename;
    }
 
 
 
 
        public static void main (String[]args){
 
            Human driver = new Human("Juergen", "Staub");
            Human h1 = new Human("Andrea", "Bora");
            Human h2 = new Human("Franzi", "Ada");
            Human h3 = new Human("Leah", "Posh");
            Human h4 = new Human("Susi", "Fresh");
            Human h5 = new Human("Lucky", "Fuke");
            Taxi aTaxi=new Taxi(driver);
            ArrayList <Human> taxi = new ArrayList <Human> (4);
 
            if (taxi.size()==0) {
                System.out.println("This is the taxi of " + driver.getDrivername() +". He takes nobody along.");
            }
 
            taxi.add(h1);
 
            if (taxi.size()==1) {
                System.out.println("This is the taxi of " + driver.getDriverName() +". He takes "+h1.getName()+ " along.");
            }
            taxi.add(h2);
            taxi.add(h3);
            taxi.add(h4);
 
            if (taxi.size()==4) {
                System.out.println("This is the taxi of " + driver.getDriverName() +". He takes "+ h1.getName()+","+ h2.getName()+ ","+ h3.getName()+","+ h4.getName()+" along.");
            }
 
            taxi.add(h5);
 
            if (taxi.size()==5) {
                System.out.println("We are sorry, "+ h5.getName() +". The taxi is full.");
            }
 
            taxi.clear();
 
 
            System.out.println("This  is the car of  " + driver.getDriverName());
            //for (Human counter:taxi){
            //    System.out.println(counter + " gets in");
            //}
 
 
 
            System.out.println("Now car has " + taxi.size() + "places to seat");
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2019, 12:34
Ответы с готовыми решениями:

Создание метода для поиска по классу
Привет всем, возникла такая проблема: нужно написать программу в которой создавался бы класс &quot;город&quot; и класс &quot;область&quot;...

Создание метода в классе
Добрый день. Написал алгоритм чтения файла, в котором создаётся вектор объектов, но не получается сделать из этого алгоритма метод...

Обращение к другому классу
Всем привет! Ребят, вроде пишу всё правильно, но что-то идёт не так. Нужна помощь знатоков ;) Ситуация следующая: Есть класс...

20
 Аватар для InvalidCode
295 / 470 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
07.05.2019, 12:40
А не проще в класе Human создать переменую
Java
1
boolean isDriver;
а в такси всовываем просто список из пяти хуманов, тот же арайлист хотябы.
Цитата Сообщение от Федо Посмотреть сообщение
Human driver
- это вообще бред, имена класов, да и чего либо дру3гого пишутся слитно и без пробелов.
на крайнял, если так уж нужет отдельный клас водятла создаем его
Java
1
2
3
public class Driver extends Human{
////
}
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.05.2019, 12:45
Цитата Сообщение от Федо Посмотреть сообщение
String forename
почему вот это не вызывает у тебя вопросов, а вот это
Цитата Сообщение от Федо Посмотреть сообщение
private Human driver;
вызывает?
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
07.05.2019, 12:46  [ТС]
Я скорее всего неправильно выразился.
Мне необходимо сделать так чтобы в каждый объект класса Taxi у меня имел атрибут driver типа Human.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
07.05.2019, 12:47
Цитата Сообщение от Федо Посмотреть сообщение
Методом тыка и поиска в интернете я создал водителя это строкой
нет, не создал, ты буквально на языке джава сказал вот что "объявляю приватную (доступную только в этом классе) переменную типа Хьюман". В этой переменной еще ничего нет и объект не создан

Цитата Сообщение от Федо Посмотреть сообщение
driver.name + " " + driver.forename;
используй геттеры getName(), getForename() раз уж они у тебя есть ну и класс Хьюман должен быть импортирован или лежать в том же пакете что и такси

по видео с ютуба учишь джаву или джавараш?
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
07.05.2019, 12:47  [ТС]
String forename
почему вот это не вызывает у тебя вопросов, а вот это
Это бред полный, не заметил когда вставлял код. Это мои записи сумасшедшего.....
0
 Аватар для InvalidCode
295 / 470 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
07.05.2019, 12:48
Цитата Сообщение от Федо Посмотреть сообщение
driver типа Human.
Java
1
Human driver = new Human();
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.05.2019, 12:49
Цитата Сообщение от InvalidCode Посмотреть сообщение
Human driver = new Human();
конструктор для кого написан?
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
07.05.2019, 12:49  [ТС]
Типа того, но мне таки не дали нормальных лекций и ищу инфу где только можно...
0
 Аватар для InvalidCode
295 / 470 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
07.05.2019, 12:51
Цитата Сообщение от Федо Посмотреть сообщение
что это такое? можете объяснить?
- это объявление переменой

Добавлено через 1 минуту
xoraxax,
Цитата Сообщение от xoraxax Посмотреть сообщение
конструктор для кого написан?
не заметил, смотрел одним глазом, другой сейчас занят новой серией Игры престолов
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
07.05.2019, 12:53
Цитата Сообщение от Федо Посмотреть сообщение
но мне таки не дали нормальных лекций и ищу инфу где только можно...
книги! тысячи лет все росли на них, попробуй! там прямо с первых глав тебе расскажут и про приват и про конструктор и про импорты.
вот Литература по Java
1
 Аватар для InvalidCode
295 / 470 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
07.05.2019, 12:55
Цитата Сообщение от Welemir1 Посмотреть сообщение
но мне таки не дали нормальных лекций и ищу инфу где только можно
Не боись, юный хоббит, я тоже самоучка.

Добавлено через 30 секунд
А литературу прочти. это помогает
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
07.05.2019, 12:56  [ТС]
Началась небольшая вакханалия и я все же не понимаю
Я таки сделал так, чтобы объект класса Taxi имел атрибут driver типа Human. Или нет?
Если нет то почему?) И почему все же метод
Java
1
2
3
public String getDrivername( ) {
        return driver.name + " " + driver.forename;
    }
не работает??
0
 Аватар для InvalidCode
295 / 470 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
07.05.2019, 12:58
Можно еще тут посмотреть, тоже не плохая подборка
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
07.05.2019, 13:10  [ТС]
InvalidCode
Можно еще тут посмотреть, тоже не плохая подборка
Обязательно посмотрю и буду читать, сейчас просто уже немного паника, столько времени прошло, а я не понимаю элементарных вещей...
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
07.05.2019, 13:15
Федо, потому что вы создали пустую переменную, а не объект. Нельзя обращаться к полям пустой переменной. Если бы вы объявили водителя как Human driver = new Human("Elon", "Musk"); тогда к её полям можно было бы обратиться. Ну и, не знаю, надо ли вам, но вот примерно вот так можно было бы это всё реализовать:

Human
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package me.taxi;
 
public class Human {
    private String forename, name;
 
    public String getName() {
        return name + " " + forename;
    }
 
    public String getForename() {
        return forename;
    }
 
    public Human(String fona, String na) {
        this.forename = fona;
        this.name = na;
    }
 
    @Override
    public String toString(){
        return this.name + this.forename;
    }
}


Taxi
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package me.taxi;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
 
public class Taxi {
    private Human driver;
    private ArrayList<Human> passengers = new ArrayList<>();
    
    public Taxi(Human driver, Human... passengers) {
        this.driver = driver;
        this.passengers.addAll(new ArrayList<Human>(Arrays.stream(passengers).collect(Collectors.toList())));
    }
    
    public String getDriver() {
        return driver.getName();
    }
    
    public String getPassengers() {
        StringBuilder sb = new StringBuilder();
        passengers.forEach(p -> sb.append(p.getName()).append("\n"));
        return sb.toString();
    }
}


Program
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import me.taxi.*;
 
public class test {
    public static void main(String[] args) {
        Human h1 = new Human("Andrea", "Bora");
        Human h2 = new Human("Franzi", "Ada");
        Human h3 = new Human("Leah", "Posh");
        Human h4 = new Human("Susi", "Fresh");
        
        Taxi tx = new Taxi(h1, h2, h3, h4);
        System.out.println(tx.getDriver());
        System.out.println(tx.getPassengers());
    }
}
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
07.05.2019, 13:20
Цитата Сообщение от Gungala Посмотреть сообщение
public class test
а как классы в джаве надо называть, с какой буквы?
метод getName() в твоем Хумане от туСтринг отличается только пробелом) ты вводишь в заблуждение возвращая не имя, что впрочем у тебя в правилах, как я понимаю, ибо в Такси в методе гетДрайвер ты возвращаешь не водителя а его имя.
1
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
07.05.2019, 13:21
И да, к полям объектов нельзя обращаться напрямую, это нарушает один из принципов ООП. Вместо этого нужно использовать методы, возвращающие значения этих полей. Например, вместо driver.name нужно использовать метод driver.getName()
1
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 154
07.05.2019, 13:24  [ТС]
Welemir1

public class test
а как классы в джаве надо называть, с какой буквы?
метод getName() в твоем Хумане от туСтринг отличается только пробелом) ты вводишь в заблуждение возвращая не имя, что впрочем у тебя в правилах, как я понимаю, ибо в Такси в методе гетДрайвер ты возвращаешь не водителя а его имя.
Да, мне нужно вывести именно имя..
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
07.05.2019, 13:25
Welemir1, я знаю про классы, но вы же должны были заметить, что класс называется "test". Это мой универсальный класс для проверки всякой ерунды и я не считаю нужным быть таким строгим по отношению к нему

Цитата Сообщение от Welemir1 Посмотреть сообщение
метод getName() в твоем Хумане от туСтринг отличается только пробелом)
Это не мои методы, их написал автор темы, я решил их не менять
Цитата Сообщение от Welemir1 Посмотреть сообщение
в методе гетДрайвер ты возвращаешь не водителя а его имя.
Я сделал так просто для демонстрации того, как это по идее должно работать, ибо автор просто напрямую обращался к полю driver.name
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2019, 13:25
Помогаю со студенческими работами здесь

Обращение к другому классу
Добрый день , такой вопрос, пишу код на ООП. Есть класс игрока , он создается при заходе в программу, есть класс предметов, он создается...

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

Передача строк другому классу
В общем вкратце обрисую ситуацию, на первом снимке имеется кнопка, где я ввожу в тексбоксы логин и пасс, на втором снимке мне надо их...

Доступ к другому классу из MainWindow
Добрый день! Возникла такая проблема: есть класс MainWindow, и класс Test, в котором некоторые данные записываются в QVector. Мне нужно...

Приведение типа к другому классу
Предположим есть класс class A { char a; void foo(); }; можно ли делать так class B: public A


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

Или воспользуйтесь поиском по форуму:
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