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

Реализовать метод setName, чтобы с его помощью можно было устанавливать значение private String name

20.12.2014, 22:17. Показов 21119. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот задача,многие знают откуда она:
Реализовать метод setName, чтобы с его помощью можно было устанавливать значение переменной private String name равное переданному параметру String name.

Java
1
2
3
4
5
6
7
public class Cat {
    private String name;
 
    public void setName(String name) {
        this.name = name;
    }
}
Единственное что я написал так это this.name = name; Задача решена,Только я не понял как и что...Помогите плз,обьясните по этапно что делается тут?ничего не пойму.....
спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2014, 22:17
Ответы с готовыми решениями:

Как создать метод, чтобы его можно было бы вызвать из другого класса?
Как создать метод, чтобы его можно было бы вызвать из другого класса? Создаю в Form1.cs метод для рисования графика public ...

Превратить программу так, чтобы используя метод Func можно было найти наибольшее значение из четырех цифр
Превратить программу так, чтобы используя метод Func можно было найти наибольшее значение из четырех цифр: a, b, c, d. Метод Func при этом...

Как узнать какой репозиторий подключить, чтобы можно было устанавливать определенный пакет через sudo apt-get install
Это может показаться смешным... но все же... часто возникает проблема, что sudo apt-get install (например libpng-devel) ...

9
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
20.12.2014, 22:32
Поскольку переменная name объявлена как private, ее нельзя изменить напрямую:
Java
1
2
3
4
5
6
7
8
9
10
11
public class Cat {
    private String name;
 
    public void setName(String name) {
        this.name = name;
    }
    public static void main(String[] args) {
      Cat myCat = new Cat();
      myCat.name = "QWERTY";
    }
}
Такой код вызовет ошибку. Поэтому пишем public метод setName в котором делаем присваивание. Слово this - обращение к элементам данного класса.
Тогда такой код будет работать:
Java
1
2
3
4
5
6
7
8
9
10
11
public class Cat {
    private String name;
 
    public void setName(String name) {
        this.name = name;
    }
    public static void main(String[] args) {
      Cat myCat = new Cat();
      myCat.setName("QWERTY");
    }
}
0
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
20.12.2014, 22:43
А почему этот код вызовет ошибку
Java
1
2
    Cat myCat = new Cat();
      myCat.name = "QWERTY";
он работает только в объявленном классе, просто так не надо делать, т.к. нарушает принцип инкапсуляции.
1
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
20.12.2014, 22:46
Sanan07, да согласен. В данном классе работать будет, а вот если объект класса Cat в другом классе создать... Ну и да, принцип инкапсуляции нарушается.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 7
20.12.2014, 23:12  [ТС]
this не пойму к чему обращение? что он заменяет?
спасибо
0
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
21.12.2014, 00:26
this.name это поле объекта который вызывает этот метод. Выражение this.name=name означает, что значение name присваивается к соответствующему полю name объекта ,который вызывает этот метод.
0
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 11
21.12.2014, 00:45
Какого обькта,Там же нет обьектов? Можно попроще плз)
0
36 / 36 / 33
Регистрация: 21.12.2012
Сообщений: 64
21.12.2014, 02:06
В методе и классе имя переменной (name) совпадает. Что бы обратится к переменной класса используется this.
0
 Аватар для MrKvant
7 / 7 / 4
Регистрация: 15.12.2014
Сообщений: 17
21.12.2014, 06:01
Ключевое слово this возвращает ссылку на объект, который вызывает функцию.

Обычный класс Foo с 2 методами:
Java
1
2
3
4
5
6
7
8
9
10
11
public class Foo {
 
    public Foo func1(){
        System.out.println("PRINT_ONE");
        return this;
    }
 
    public void func2(){
        System.out.println("PRINT_TWO");
    }
}
Здесь интересен метод func1(). Что же становится результатом метода, т.е. что он возвращает?
Он возвращает ОБЪЕКТ, который вызвал метод func1().
- Ок Ок, а зачем нам это надо?
- Это дает невероятные возможности.

Главный класс:
Java
1
2
3
4
5
6
public class Main {
    public static void main(String[] args) {
        Foo obj = new Foo();
        obj.func1().func1().func1().func2();
    }
}
Посмотрим результат выполнения программы:
PRINT_ONE
PRINT_ONE
PRINT_ONE
PRINT_TWO

ЧТО ЭТО ВООБЩЕ ТАКОЕ?! У метода вызвался метод??
- вовсе нет, после первого вызова метода obj.func1() вывелось на консоль "PRINT_ONE" и вернулся объект obj. Т.е говоря другим языком: выражение obj.func1() заменилось на obj, а у obj мы снова можем чего-нибудь вызвать. Когда вызываем func2() мы выводим на консоль строку, но ничего не возвращаем. У этого метода нет таких классных возможностей.
Цитата Сообщение от JarvanXIII Посмотреть сообщение
public void setName(String name) {
this.name = name;
}
Че мы здесь делаем? МЫ хотим в будущем создать объект класса Cat и задать имя, т.е полю name присвоить значение. Можно было бы сделать так:
Java
1
2
3
public void setName(String nameCat) {
       name = nameCat;
}
Но т.к. мы хотим все делать красиво, то имя аргумента метода тоже сделаем name:
Java
1
2
3
public void setName(String name) {
       name = name;
}
И че делать теперь. У нас имя поля и имя аргумента метода совпадает. И какое же нам использовать? Компилятор Java особо не заморачивается и просто перестает видеть поле класса.
А что теперь делать, Я ХОЧУ ЧТОБЫ У МЕНЯ БЫЛИ КРАСИВЫЕ ИМЕНА!?
-очень просто. вспомним про this. Он вернет объект, у которого вызван был метод и у это объекта, мы обратимся к полю класса name.
Java
1
2
3
public void setName(String name) {
        this.name = name;
}
Добавлено через 9 минут
Плюс обратите внимание какая компактная запись получилась
Цитата Сообщение от MrKvant Посмотреть сообщение
obj.func1().func1().func1()
А вот если бы мы захотели 3 раза вызвать метод func2(), пришлось бы сделать так:
Java
1
2
3
obj.func2();
obj.func2();
obj.func2();
0
0 / 0 / 0
Регистрация: 18.10.2023
Сообщений: 2
20.10.2023, 17:34
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Man
{
    private String fullname;
 
    public void setName(String firstName, String lastName)
    {
        String fullName = firstName + lastName;
        this.fullname = fullName;
 
    }
 
    public static void main(String[] args) {
        Man man = new Man();
        man.setName("firstName"[U],[/U]"lastName");
        System.out.println(man.fullname);
    }
 
}
Там вся суть заключается в вот этой запятой(выделил двумя [U]), а так ничего сложного
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.10.2023, 17:34
Помогаю со студенческими работами здесь

Игра "Жизнь" добавить Edit ,чтобы можно было самому устанавливать параметры
Дорогие друзья помогите пожалуйста с добавлением edit-ов ,так чтобы я могу устанавливать в них: edit1-установка при сколки клетках...

Как значение id заменить на textbox, чтобы туда можно было вписать значение
private void отчетToolStripMenuItem_Click(object sender, EventArgs e) { Вид_топлива customer = bd.Вид_топлива ...

Как обработать функцию OnMouseDown, чтобы можно было осуществлять навигацию с помощью мыши?
Вопрос звучит следующим образом: Есть форма, на ней карта разрешения 15000х12000. Просматривать можно с помощью ScrollBar. Как...

Написать процедуру, чтобы можно было вводить числа с клавиатуры и вывод выдавал с помощью Enter
нужно помочь написать процедуру,чтобы можно было вводить числа с клавиатуры и вывод выдавал с помощью Enter в калькулятор с должна...

Как сделать так, чтобы в программе можно было уничтожать динамические переменные с помощью dispose?
Помогите сделать ток чтоб в программе можно было уничтожать динамические переменные с помощью dispose unit Unit2; interface ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru