تعدیل کننده های غیردسترسی (Non-Access Modifiers)
تعدیل کننده های غیردسترسی روی «دید» اثر ندارند. آن ها ویژگی های اضافه می دهند. مثلا final مقدار را ثابت می کند، static به خود کلاس تعلق دارد، و abstract بدنه ندارد. با این ها، کد مرتب تر می شود.
final؛ مقدار همیشه ثابت
وقتی ویژگی را 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; // خطا: تغییر روی final مجاز نیست
myObj.PI = 25; // خطا: تغییر روی final مجاز نیست
System.out.println(myObj.x);
}
}
static؛ وابسته به کلاس
static یعنی عضو به «کلاس» تعلق دارد، نه شیء. پس بدون ساختن شیء هم می توانی صدا بزنی.
public class Main {
static void myStaticMethod() {
System.out.println("Static methods can be called without creating objects");
}
public static void main(String[] args) {
myStaticMethod();
Main.myStaticMethod();
}
}
نکته: متد static به داده های شیء دسترسی مستقیم ندارد. چون به شیء خاصی وابسته نیست.
abstract؛ تعریف بدون بدنه
abstract یعنی متد فقط «قرارداد» دارد و بدنه ندارد. زیرکلاس باید بدنه را بنویسد. مثل قانون مدرسه که کلاس ها باید اجرا کنند.
abstract class Main {
public String fname = "John";
public int age = 24;
public abstract void study();
}
class Student extends Main {
public int graduationYear = 2018;
public void study() {
System.out.println("Studying all day long");
}
}
class Second {
public static void main(String[] args) {
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();
}
}
سه گام تمرینی سریع
- یک ویژگی
finalبساز و تلاش کن تغییرش دهی. - یک متد
staticبساز و مستقیم صدا بزن. - یک کلاس
abstractو زیرکلاس پیاده سازی تعریف کن.
نکته: برای دیدن تفاوت «دسترسی» و «غیردسترسی»، صفحه تعدیل کننده های دسترسی را بخوان. همچنین کپسوله سازی را در Encapsulation دنبال کن. برای مرور کلی، تعدیل کننده های غیردسترسی را در کنار مبحث دسترسی مقایسه کن.
جمع بندی سریع
finalمقدار را غیرقابل تغییر می کند.staticبه کلاس تعلق دارد.abstractبدنه ندارد و زیرکلاس تکمیل می کند.- این ها دید را تغییر نمی دهند.