Java Модифікатори
Модифікатори
Наразі ви добре знайомі з ключовим словом public
, яке зустрічається майже в усіх наших прикладах:
public class Main
Ключове слово public
є модифікатором доступу, що означає, що воно використовується для встановлення рівня доступу для класів, атрибутів, методів і конструкторів.
Ми поділяємо модифікатори на дві групи:
- Модифікатори доступу – керує рівнем доступу
- Модифікатори без доступу - не контролюють рівень доступу, але надають інші функції
Модифікатори доступу
Для класів ви можете використовувати public
або default:
Модифікатор | Опис | Спробуй це |
---|---|---|
public |
Клас доступний будь-якому іншому класу | Спробуй це » |
default | Клас доступний лише для класів у тому самому пакеті. Це використовується, коли ви не вказуєте модифікатор. Ви дізнаєтеся більше про пакети в розділі Пакети | Спробуй це » |
Для атрибутів, методів і конструкторів можна використовувати один із наведених нижче:
Модифікатор | Опис | Спробуй це |
---|---|---|
public |
Код доступний для всіх класів | Спробуй це » |
private |
Код доступний лише в межах оголошеного класу | Спробуй це » |
default | Код доступний лише в одному пакеті. Це використовується, коли ви не вказуєте модифікатор. Ви дізнаєтеся більше про пакети в розділі Пакети | Спробуй це » |
protected |
Код доступний у тому самому пакеті та підкласах. Ви дізнаєтеся більше про підкласи та суперкласи в розділі Наслідування | Спробуй це » |
Модифікатори без доступу
Для класів ви можете використовувати його final
або abstract
:
Модифікатор | Опис | Спробуй це |
---|---|---|
final |
Клас не може бути успадкований іншими класами (ви дізнаєтеся більше про успадкування в розділі Наслідування) | Спробуй це » |
abstract |
Клас не можна використовувати для створення об’єктів (щоб отримати доступ до абстрактного класу, його потрібно успадкувати від іншого класу. Ви дізнаєтеся більше про наслідування та абстракцію в розділах Наслідування та Абстракція) | Спробуй це » |
Для атрибутів і методів можна використовувати один із наведених нижче:
Модифікатор | Опис |
---|---|
final |
Атрибути та методи не можна перевизначати/змінювати |
static |
Атрибути та методи належать класу, а не об’єкту |
abstract |
Його можна використовувати лише в абстрактному класі та лише в методах. Метод не має тіла, наприклад, abstract void run();. Тіло надається підкласом (успадковується від). Ви дізнаєтеся більше про успадкування та абстракцію в розділах Наслідування та Абстракція |
transient |
Атрибути та методи пропускаються під час серіалізації об’єкта, що їх містить |
synchronized |
Доступ до методів може мати лише один потік одночасно |
volatile |
Значення атрибута не кешується локально потоком, а завжди зчитується з "основної пам’яті" |
Фінал
Якщо ви не хочете мати можливість перевизначати існуючі значення атрибутів, оголосите атрибути як final
:
Приклад
public class Main {
final int x = 10;
final double PI = 3.14;
public static void main(String[] args) {
Main myObj = new Main();
myObj.x = 50; // спричинить помилку: неможливо призначити значення фінальної змінної
myObj.PI = 25; // спричинить помилку: неможливо призначити значення фінальної змінної
System.out.println(myObj.x);
}
}
Спробуйте самі »
Статичний
static
метод означає, що до нього можна отримати доступ без створення об’єкта класу, на відміну від public
:
Приклад
Приклад для демонстрації відмінностей між методами static
і public
:
public class Main {
// Статичний метод
static void myStaticMethod() {
System.out.println("Статичні методи можна викликати без створення об’єктів");
}
// Публічний метод
public void myPublicMethod() {
System.out.println("Публічні методи необхідно викликати під час створення об’єктів");
}
// Main метод
public static void main(String[ ] args) {
myStaticMethod(); // Викликати статичний метод
// myPublicMethod(); Це виведе помилку
Main myObj = new Main(); // Створіть об’єкт Main
myObj.myPublicMethod(); // Викликати публічний метод
}
}
Спробуйте самі »
Абстрактний
Метод abstract
належить до класу abstract
і не має тіла. Тіло надається підкласом:
Приклад
// Код з імені файлу: Main.java
// abstract клас
abstract class Main {
public String fname = "John";
public int age = 24;
public abstract void study(); // abstract метод
}
// Підклас (успадкувати від Main)
class Student extends Main {
public int graduationYear = 2018;
public void study() { // тут представлено тіло абстрактного методу
System.out.println("Навчання цілий день");
}
}
// Кінцевий код з імені файлу: Main.java
// Код з імені файлу: Second.java
class Second {
public static void main(String[] args) {
// створити об’єкт класу Student (який успадковує атрибути та методи від Main)
Student myObj = new Student();
System.out.println("Name: " + myObj.fname);
System.out.println("Age: " + myObj.age);
System.out.println("Graduation Year: " + myObj.graduationYear);
myObj.study(); // виклик абстрактного методу
}
}
Спробуйте самі »