Ключевое слово this
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 4 из 87.
Ключевое слово this ссылается на текущий экземпляр класса. Оно позволяет различать поля и параметры с одинаковыми именами.
Без this параметр затеняет поле
public class Person {
private String name;
public Person(String name) {
name = name; // Присваивает параметр самому себе!
}
}Использование this для правильного присвоения значений
public class Person {
private String name;
public Person(String name) {
this.name = name; // Присваивает параметр полю
}
public String getName() {
return this.name;
}
}Использование this в методах
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getDescription() {
return this.name + " is " + this.age + " years old";
}
}Ключевое слово this всегда указывает на текущий объект. Это важно, когда имена параметров совпадают с именами полей, что предотвращает путаницу и ошибки.
Задание
СреднеЗавершите класс Person, используя ключевое слово this для разграничения полей и параметров:
- Конструктор, который использует
thisдля присвоения параметров полям - Геттеры, использующие
thisдля доступа к полям - Метод
getDescription(), возвращающий"<name>, age <age>, from <city>"
Шпаргалка
Ключевое слово this ссылается на текущий экземпляр класса и позволяет различать поля и параметры с одинаковыми именами.
Без this параметр затеняет поле:
public Person(String name) {
name = name; // Присваивает параметр самому себе!
}Использование this для правильного присвоения значений:
public Person(String name) {
this.name = name; // Присваивает параметр полю
}Использование this в методах-геттерах:
public String getName() {
return this.name;
}Использование this с несколькими полями:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getDescription() {
return this.name + " is " + this.age + " years old";
}
}Попробуйте сами
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = Integer.parseInt(scanner.nextLine());
String city = scanner.nextLine();
Person person = new Person(name, age, city);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("City: " + person.getCity());
System.out.println(person.getDescription());
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»