Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Модифікатор Private | Класи: Розширений Рівень
Java Extended
course content

Зміст курсу

Java Extended

Java Extended

1. Глибока Структура Java
2. Методи
3. Рядки: Розширений Рівень
4. Класи
5. Класи: Розширений Рівень

book
Модифікатор Private

Як приховати поля та методи від іншого класу?

Модифікатори доступу використовуються для контролю видимості та доступності змінних і методів у Java. Вони дозволяють визначати область видимості та обмежувати доступ до певних членів класу.

Ми вже розглядали модифікатори доступу у попередньому розділі. Тепер детальніше розглянемо найпоширеніший модифікатор доступу — private.

Як відомо, за допомогою модифікатора доступу private ми можемо отримати доступ до поля або методу лише з того класу, в якому вони оголошені. Розглянемо приклад використання модифікатора private:

Наприклад, якщо ми не хочемо, щоб змінна одного класу була видимою або доступною для іншого класу, можна використати модифікатор доступу private:

Main.java

Main.java

copy
123456789101112131415
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }

Ми оголосили поля класу Person як private. Коли ми намагаємося безпосередньо ініціалізувати поле, отримуємо помилку, яка вказує, що поле name має модифікатор доступу private і недоступне для виклику чи зміни в основному методі.

Як ініціалізувати приватне поле?

Найпростіший спосіб обійти захист — використати ініціалізацію через конструктор. Однак таким чином ми можемо лише ініціалізувати поля об'єктів, але не отримати доступ до цих полів. Розглянемо приклад:

Main.java

Main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }

Ми змогли ініціалізувати поле name через конструктор, але все одно не можемо отримати доступ до цього поля та вивести його за допомогою System.out.println(). Щоб обійти це, можна перевизначити метод toString(), щоб при виклику System.out.println(bob); відображалася інформація про його поля. Розглянемо приклад:

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }

Нам нарешті вдалося відобразити значення поля name об'єкта bob. Це було досягнуто за допомогою перевизначеного методу toString(), у якому реалізовано логіку для відображення name.

Виникає питання: навіщо потрібен цей модифікатор доступу, якщо доводиться писати стільки додаткового коду?

Іноді в різних класах існують змінні з однаковими іменами, і в таких випадках необхідно приховати змінні цих класів, щоб інші класи не мали доступу до зайвих полів. Це значно підвищує зручність написання коду загалом, коли зрозуміло, яке поле належить якому класу.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

course content

Зміст курсу

Java Extended

Java Extended

1. Глибока Структура Java
2. Методи
3. Рядки: Розширений Рівень
4. Класи
5. Класи: Розширений Рівень

book
Модифікатор Private

Як приховати поля та методи від іншого класу?

Модифікатори доступу використовуються для контролю видимості та доступності змінних і методів у Java. Вони дозволяють визначати область видимості та обмежувати доступ до певних членів класу.

Ми вже розглядали модифікатори доступу у попередньому розділі. Тепер детальніше розглянемо найпоширеніший модифікатор доступу — private.

Як відомо, за допомогою модифікатора доступу private ми можемо отримати доступ до поля або методу лише з того класу, в якому вони оголошені. Розглянемо приклад використання модифікатора private:

Наприклад, якщо ми не хочемо, щоб змінна одного класу була видимою або доступною для іншого класу, можна використати модифікатор доступу private:

Main.java

Main.java

copy
123456789101112131415
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }

Ми оголосили поля класу Person як private. Коли ми намагаємося безпосередньо ініціалізувати поле, отримуємо помилку, яка вказує, що поле name має модифікатор доступу private і недоступне для виклику чи зміни в основному методі.

Як ініціалізувати приватне поле?

Найпростіший спосіб обійти захист — використати ініціалізацію через конструктор. Однак таким чином ми можемо лише ініціалізувати поля об'єктів, але не отримати доступ до цих полів. Розглянемо приклад:

Main.java

Main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }

Ми змогли ініціалізувати поле name через конструктор, але все одно не можемо отримати доступ до цього поля та вивести його за допомогою System.out.println(). Щоб обійти це, можна перевизначити метод toString(), щоб при виклику System.out.println(bob); відображалася інформація про його поля. Розглянемо приклад:

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }

Нам нарешті вдалося відобразити значення поля name об'єкта bob. Це було досягнуто за допомогою перевизначеного методу toString(), у якому реалізовано логіку для відображення name.

Виникає питання: навіщо потрібен цей модифікатор доступу, якщо доводиться писати стільки додаткового коду?

Іноді в різних класах існують змінні з однаковими іменами, і в таких випадках необхідно приховати змінні цих класів, щоб інші класи не мали доступу до зайвих полів. Це значно підвищує зручність написання коду загалом, коли зрозуміло, яке поле належить якому класу.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 3
some-alt