Public private в java просто і зрозуміло (або трохи ООП), програмування для android, java - з
А давай ті ка по швидкому розберемося, що таке модифікатори доступу в java (publicprivateprotected) і навіщо вони потрібні?
Одним з принципів об'єктно орієнтованої технології програмування є принцип інкапсуляції. Що він собою являє? А тут все просто. Суть в тому, що кожен об'єкт об'єднує в собі дані і методи роботи з цими даними, і приховує особливості реалізації від кінцевого користувача. Візьмемо об'єкт з реального життя, наприклад «автомобіль». У цього об'єкта є певні дані наприклад кількість палива в баку, тип двигуна, кількість коліс, витрата палива, тип гальмівної системи і т.д. І є методи - наприклад завести двигун, поїхати, зупинитися. Досить багато людей поняття не має як саме функціонує той чи інший механізм в їхньому автомобілі, однак це зовсім не заважає їм їздити кожен день на роботу. Справа в тому, що у автомобілів є стандартний інтерфейс: педалі гальма, газу, зчеплення, кермо, важіль управління коробкою передач (ну якщо не чіпати машини з автоматичною коробкою, там все ще простіше 🙂). Так ось виходить що автомобіль инкапсулирует величезну кількість даних і методів, але ми можемо користуватися їм не вдаючись в особливості реалізації його конструкції.
Те ж саме має місце і в об'єктно-орієнтованому програмуванні. наприклад ми створюємо клас лінія:
У нашій лінії є координати першої точки і координати другої точки. Це (x1, y1) і (x2, y2). І є конструктор. І те й інше має модифікатор доступу public. Це означає, що в будь-якому іншому класі або об'єкті ми можемо написати такий код:
Тобто і поля і методи класу доступні для всіх інших об'єктів і класів. Тепер додамо до нашого класу властивість «довжина». Отримуємо такий ось клас:
Тут вже є метод для розрахунку довжини і він викликається в кінці конструктора. Тобто довжина розраховується автоматично для кожної нової лінії. Однак що станеться, якщо ми з Вами з іншого класу безпосередньо змінимо якусь з координат:
Вийде що координати кінців відрізка змінилися, а його довжина не змінилася. Ось в таких-то ситуаціях і потрібно використовувати модифікатори доступу. перепишемо наш клас за новою. Тепер уже сховаємо поля класу модифікатором private і забезпечимо до них доступ через спеціальні методи доступу (ще такі методи називаються аксессор), так щоб користувач класу не міг змінити поля безпосередньо, а тільки за допомогою спеціального методу.
Тепер якщо ми викличемо метод setX1 (10) то в цьому методі довжина відрізка перерахується автоматично, а значить завжди буде актуальна. А поля які приховані за модифікатором доступу private будуть просто недоступні з інших класів і об'єктів.
Ну з цим начебто зрозуміло, а навіщо ж нам потрібен модифікатор protected. А давайте на основі нашого класу створимо лінію яка вміє не тільки змінювати свою довжину, а й виводити на екран координати своїх кінців. Наприклад так:
Оп-па! А ось тут ми стикаємося з помилочка! Адже поля класу батька приховані від нас, і значить роздрукувати їх ми не можемо! Але вихід, як то кажуть, завжди є. Досить просто поміняти для полів x1. y1. x2. y2 модифікатор доступу private на protected і ми отримаємо доступ до цих полів з усіх класів-нащадків, однак для інших класів вони залишаться недоступними!
Вам сподобалось? Було корисно? Поділіться!
Private вважаю не зовсім коректно пояснено, адже ніхто не буде писати окремий клас що б виводити на екран цифри з іншого класу, простіше метод виведення зробити там, або на худий кінець метод по отриманню цих змінних, з класса.І хотілося б доповнення з приводу конструкторів і методів в цій статті, не зовсім зрозуміло як їх відрізняти і навіщо потрібен конструктор, чому не можна змінними в клас передати