Особливості застосування модифікаторів в java
Для початку розберемося з модифікаторами доступу. Їх всього чотири:
- private члени класу доступні тільки усередині класу
- package-private або default (за замовчуванням) члени класу видно всередині пакету
- protected члени класу доступні всередині пакету і в класах-спадкоємців
- public члени класу доступні всім
Під час успадкування можлива зміна модифікаторів доступу в сторону БІЛЬШОЮ видимості.
Модифікатор доступу у конструкторів, методів і полів може бути будь-який, а ось з класами і їх блоками не так все просто. Клас може бути тільки або public, або default, причому в одному файлі може перебувати тільки один public клас. У блоку може бути тільки один модифікатор - default.
Модифікатори static, abstract і final
- Застосовується тільки для методів і класів
- У абстрактних методів немає тіла методу
- Є протилежністю final: final клас не може успадковуватися, abstract клас зобов'язаний успадковуватися
- Клас повинен бути оголошений як abstract якщо:
- він містить хоча б один абстрактний метод
- він не надає реалізацію успадкованих абстрактних методів
- він не надає реалізацію методів інтерфейсу, реалізацію якого він оголосив
- необхідно заборонити створення екземплярів класу
Модифікатори strictfp, transient, volatile, synchronized, native
- Застосовується для методів і класів
- Забезпечує виконання операцій над числами типу float і double (з плаваючою комою) за стандартом IEEE 754
- Застосовується тільки для змінних рівня класу (локальні змінні не можуть бути оголошені як transient)
- Transientпеременние можуть не бути final або static.
- Transientпеременние НЕ серіалізуются
- Використовується тільки з перемінними
- Може використовуватися з static змінними
- Не використовується з final змінними - Значення змінної, оголошеної як volatile, змінене одним потоком, асинхронно змінюється і для інших потоків
- Застосовується в багатопотокових застосуваннях
Synchronized
- Застосовується тільки до методів або частинам методів
- Використовується для контролю доступу до важливим частинами коду в багатопоточних програмах
- Використовується тільки для методів
- Позначає, що метод написаний іншою мовою програмування
- Класи в Java використовують багато native методів для підвищення продуктивності і доступу до апаратних засобів
- Можна зраджувати / повертати Java об'єкти з native методів
- Сигнатура методу повинна закінчуватися ";", фігурні дужки викличуть помилку компіляції
Особливості в інтерфейсах
- Методи завжди public і abstract, навіть якщо це не оголошено
- Методи не можуть бути static, final, strictfp, native, private, protected
- Змінні тільки public static final, навіть якщо це не оголошено
- Змінні не можуть бути strictfp, native, private, protected
- Може тільки наслідувати (extends) інший інтерфейс, але не реалізовувати інтерфейс або клас (implements).
Зберемо все модифікатори разом: