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

Связь классов и переменных

12.01.2018, 22:08. Показов 1710. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Сразу приношу извинения, может за столь глупый теоретический вопрос, но найти ответ на просторах интернета у меня не получаеться. Попытаюсь изложить суть. Программа не доделана, вопрос чисто теоретический.

Имеются дополнительно классы Kunde и Buch:

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
public class Kunde {
    public int nummer;
    public int alter;
    public String vorname;
    public String nachname;
}
 
public class Buch {
    public String titel;
    public String autor;
    public int jahr;
    public Kunde entliehen;
 
}
 
public class Bibliothek {
 
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        Buch b = new Buch();                        
        b.titel = "Erotische Kurzgeschichten";
        b.autor = "Gerda Spieß-Schwengel";
        b.jahr = 2017;
        
        Kunde k = new Kunde ();                      
        k.nummer = (int) (Math.random()*2000+1000);
        System.out.print("alter: ");
        k.alter = scan.nextInt();
        System.out.print("vorname: ");
        k.vorname = scan.next();
        System.out.print("nachname: ");
        k.nachname = scan.next();
        
                b.entliehen = k;
        
        scan.close();
 
    }
 
}
Вот понятно переменные типа Int, Double и т.д., но зачем вообще нужна переменная типа Kunde в классе Buch и зачем строка "b.entliehen = k;"? Я понимаю что это какая-то там связь между объектами разных классов, но смысл от этого? Если можно обращаться к ним и без этой команды.

Всем заранее искренне благодарен.

P.s. Приношу извинения за не столь ясные вопросы, но мне самому тяжело толком обьяснить, что не понятно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2018, 22:08
Ответы с готовыми решениями:

Связь классов
В общем, Есть у меня класс Абонент, внутри которого вложенные классы услуг. Есть класс Оператор. Как мне "привязать"...

Связь классов и переменных_2
Добрый день! 

В продолжении темы классов снова нужна ваша помощь. Пытаюсь сделать список с заранее не фиксированным количеством...

Передача переменных из других классов
Здравствуйте. Вот постигаю java нашел задачку на "построение" двигателя. Но не могу понять как передать из других классов переменные. ...

26
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
13.01.2018, 01:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xoraxax Посмотреть сообщение
1с-ник поди
мимо
Цитата Сообщение от xoraxax Посмотреть сообщение
может сразу учить, как правильно делать?
нельзя каждую тонкость рассказать за пару лекций сразу
Цитата Сообщение от xoraxax Посмотреть сообщение
Вон, КОП, знает как облегчить.
не надо на меня перекладывать
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.01.2018, 02:42
Сам же сказал, что можно проще
0
1 / 1 / 0
Регистрация: 12.01.2018
Сообщений: 13
17.01.2018, 22:13  [ТС]
iSmokeJC, alex white, КОП,
Добрый вечер,
у меня снова вопрос в продолжении этой темы о связях.
Данн класс Клиента:
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
public class Kunde {
    int nummer;
    int alter;
    String vorname;
    String nachname;
    
    public Kunde (int a, int b, String c, String d) {
        this.nummer = a;
        this.alter = b;
        this.vorname = c;
        this.nachname = d;
    }
    
    public void setKunde(int a, int b, String c, String d) {
        this.nummer = a;
        this.alter = b;
        this.vorname = c;
        this.nachname = d;
    }
    
    public void printKunde() {
        System.out.printf("Nummer: %d, alter: %d, Vorname: %s, Nachname: %s \n", this.nummer, 
                                                            this.alter, this.vorname, this.nachname);
    }
    
}
Так же класс Книги:
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
public class Buch {
    String titel;
    String autor;
    int jahr;
    Kunde entliehen;
    
    public Buch(String a, String b, int c) {
        this.titel = a;
        this.autor = b;
        this.jahr = c;
    }
    
    public Buch(String a, String b, int c, Kunde d) {
        this.titel = a;
        this.autor = b;
        this.jahr = c;
        this.entliehen = d;
//      this.entliehen.nummer = d.nummer;
//      this.entliehen.alter = d.alter;
//      this.entliehen.vorname = d.vorname;
//      this.entliehen.nachname = d.nachname;
    }
    public void setBuch(String a, String b, int c) {
        this.titel = a;
        this.autor = b;
        this.jahr = c;
    }
    
    public void printBuch() {
        System.out.printf("Titel: %s, Autor: %s, Jahr: %d, ", this.titel, this.autor, this.jahr);
        this.entliehen.printKunde();
    }
 
}
Мейн:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class test12 {
 
    public static void main(String[] args) {
        Kunde klient = new Kunde(341, 30, "Max", "Mustermann");
        klient.printKunde();
        System.out.println();
        
        Buch kniga = new Buch("Erotische Kurzgeschichten", "Gerda", 2000, klient);
        kniga.printBuch();
    }
 
}
данная программа отрабатывает и выводит, то что мне нужно:
"Nummer: 341, alter: 30, Vorname: Max, Nachname: Mustermann

Titel: Erotische Kurzgeschichten, Autor: Gerda, Jahr: 2000, Nummer: 341, alter: 30, Vorname: Max, Nachname: Mustermann "

Но если я в классе Buch во втором конструкторе уберу строку "this.entliehen = d;" и вместо нее оставлю закомментированные строки, которые идут сразу следом, то программа печатает ток первый метод и выдает следующую ошибку:
"Nummer: 341, alter: 30, Vorname: Max, Nachname: Mustermann

Exception in thread "main" java.lang.NullPointerException
at Test.Buch.<init>(Buch.java:18)
at Test.test12.main(test12.java:8)"

Почему значения, если присвоены целым объектом, то передаются? А если передать значения каждого поля отдельно, то программа выдает ошибку? Ведь в конструктор уже были переданы поля объекта класса Kunde со своими значениями (Смотрел через дебагер). Но во втором случае выдает ошибку, не понимаю почему. На сколько я понял, то так напрямую к каждому полю, через преданный объект, можно обращаться, или я это не правильно делаю?

Заранее благодарен.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
17.01.2018, 23:23
Цитата Сообщение от Vet_on Посмотреть сообщение
Но если я в классе Buch во втором конструкторе уберу строку "this.entliehen = d;" и вместо нее оставлю закомментированные строки, которые идут сразу следом, то программа печатает ток первый метод и выдает следующую ошибку:
объект то не создан, программа пытается писать данные в несуществующее место
Java
1
2
3
4
5
6
7
8
9
10
 public Buch(String a, String b, int c, Kunde d) {
        this.titel = a;
        this.autor = b;
        this.jahr = c;
        this.entliehen = new Kunde(d.nummer, ...);
//      this.entliehen.nummer = d.nummer;
//      this.entliehen.alter = d.alter;
//      this.entliehen.vorname = d.vorname;
//      this.entliehen.nachname = d.nachname;
    }
Цитата Сообщение от Vet_on Посмотреть сообщение
то так напрямую к каждому полю, через преданный объект, можно обращаться
ну к тем что доступны да.
Цитата Сообщение от Vet_on Посмотреть сообщение
Почему значения, если присвоены целым объектом, то передаются?
просто копируется ссылка на объект (если в этом случае изменить поле в переданном Kunde, то в Buch оно тоже изменится, так как это 2 указателя на один и тот же объект)

Цитата Сообщение от Vet_on Посмотреть сообщение
Buch kniga
а вот так мешать языки точно не надо. Ладно один немецкий простительно (хотя не все согласны и во многом даже правы), но это перебор
1
1 / 1 / 0
Регистрация: 12.01.2018
Сообщений: 13
18.01.2018, 00:28  [ТС]
КОП,

Понял, спасибо большое.

Цитата Сообщение от КОП Посмотреть сообщение
а вот так мешать языки точно не надо. Ладно один немецкий простительно (хотя не все согласны и во многом даже правы), но это перебор
это тестовый файл, думал так будет читателям форума лучше прям сразу в глаза кидаться, чтобы понятней было. А в оригинале только один язык
0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
19.01.2018, 18:39
Строкой public Kunde entliehen; вы объявляете переменную типа Kunde в своем классе.
Это такая же переменная класса, как и другие. Только тип переменной - другой класс.

Цитата Сообщение от Vet_on Посмотреть сообщение
зачем строка "b.entliehen = k;"?
вы создали экземпляр класса строкой Buch b = new Buch();
теперь к переменным и методам экземпляра класса вы обращаетесь так : b.метод_или_переменная.
Да можно обращаться из того же класса и из его же методов через this.b = значение;
К статичным переменным класса вы можете обращаться не через экземпляр класса, а через имя класса.
Вы обращаетесь через экземпляр b.entliehen , эта переменная принадлежит экземпляру класса с именем b.

Цитата Сообщение от Vet_on Посмотреть сообщение
проверим выполняется ли данное условие, будет-ли выполняться равенство:
if (b.entliehen == k) // тут что-то делаем если в скобках возвращается истина

выражение b.entliehen = k; в переменную экземпляра класса "в" с именем переменной "entliehen" заносится значение переменной к,
если это простые типы и присваивается ссылка в случае с объектами.
0
1 / 1 / 0
Регистрация: 12.01.2018
Сообщений: 13
20.01.2018, 23:16  [ТС]
vvm28,

Это вы подытожили предыдущие обсуждения в теме, но более детально.
Все равно большое спасибо за ваше внимание.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2018, 23:16

Эффективная связь классов
Очередной вопросик нарисовался. Имеется 2 класса, не являющиеся родственными. При этом экземпляр одного используется из другого. Как...

Связь классов и методов
Помогите понять в чём проблема,в классе TTopic создал метод типа другого класса,а компилятор на это ругается,что не так? #include...

Связь объектов классов
Добрый день господа. Нужна помощь гуру:) Возник вопрос реализации связи объектов классов, насколько логично использование связи многие ко...

Связь переменных
Здравствуйте Как связать переменную из класса CDialog с переменной из класса CDocument?

Связь классов с мувиклипами на сцене (AF+FD)
Есть флеш игра. Во флеш игре есть локация, допустим, деревня. В деревне есть, допустим, несколько деревьев и два домика. Создавать локацию...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru