Модифікатор Private
Як приховати поля та методи від іншого класу
Модифікатори доступу використовуються для контролю видимості та доступності змінних і методів у Java. Вони дозволяють визначати область видимості та обмежувати доступ до певних членів класу.
Ми вже розглядали модифікатори доступу у попередньому розділі. Тепер розглянемо детальніше найпоширеніший модифікатор доступу — private.
Як відомо, за допомогою модифікатора доступу private ми можемо отримати доступ до поля або методу лише з того класу, в якому вони оголошені. Розглянемо приклад використання модифікатора private:
Наприклад, якщо ми не хочемо, щоб змінна одного класу була видимою або доступною для іншого класу, можна використати модифікатор доступу private:
Main.java
123456789101112131415package 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
123456789101112131415161718package 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
1234567891011121314151617181920212223package 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.
Виникає питання: навіщо потрібен цей модифікатор доступу, якщо доводиться писати стільки додаткового коду?
Іноді в різних класах існують змінні з однаковими іменами, і в таких випадках необхідно приховувати змінні цих класів, щоб інші класи не мали доступу до зайвих полів. Це значно підвищує зручність написання коду загалом, коли зрозуміло, яке поле належить якому класу.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.63
Модифікатор Private
Свайпніть щоб показати меню
Як приховати поля та методи від іншого класу
Модифікатори доступу використовуються для контролю видимості та доступності змінних і методів у Java. Вони дозволяють визначати область видимості та обмежувати доступ до певних членів класу.
Ми вже розглядали модифікатори доступу у попередньому розділі. Тепер розглянемо детальніше найпоширеніший модифікатор доступу — private.
Як відомо, за допомогою модифікатора доступу private ми можемо отримати доступ до поля або методу лише з того класу, в якому вони оголошені. Розглянемо приклад використання модифікатора private:
Наприклад, якщо ми не хочемо, щоб змінна одного класу була видимою або доступною для іншого класу, можна використати модифікатор доступу private:
Main.java
123456789101112131415package 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
123456789101112131415161718package 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
1234567891011121314151617181920212223package 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.
Виникає питання: навіщо потрібен цей модифікатор доступу, якщо доводиться писати стільки додаткового коду?
Іноді в різних класах існують змінні з однаковими іменами, і в таких випадках необхідно приховувати змінні цих класів, щоб інші класи не мали доступу до зайвих полів. Це значно підвищує зручність написання коду загалом, коли зрозуміло, яке поле належить якому класу.
Дякуємо за ваш відгук!