Java giriş dəyişdiricisi qurmağa imkan verir görünmə dərəcəsi or giriş hüququ dəyişənlər, metodlar, siniflər və konstruktorlar üçün. Ümumiyyətlə, 2 fərqli növ var Java-da modifikatorlara giriş.
- Giriş dəyişdiriciləri - giriş səviyyəsinə nəzarət edir
- Giriş olmayan modifikatorlar - giriş səviyyəsini idarə etmir, lakin digər funksiyaları təmin edir.
Bu təlimatda fərqli java giriş dəyişdiricilərini müzakirə edəcəyik.
Mündəricat
Java giriş dəyişdiricisinin növləri
4 fərqli java giriş dəyişdirici var.
- Default: Heç bir açar söz tələb etmir və standart olaraq qəbul edilir. Kapsam paket içərisindədir.
- Xüsusi: Sahə yalnız sinif daxilindədir.
- Qorunan: Paket daxilində əlçatandır. Paket xaricinə daxil olmaq üçün bunu yalnız miras yolu ilə edə bilərik.
- Ictimai: Hər yerdə əlçatandır
İndi hər bir java giriş modifikatorunu ətraflı şəkildə anlayaq.
Varsayılan giriş dəyişdiricisi
Bir sinif, dəyişən, metod və ya konstruktor üçün hər hansı bir modifikator təyin etmədikdə, onu standart giriş modifikatoru hesab edirik. Bu tip java giriş dəyişdiricisinin əhatə dairəsi yalnız paket içərisindədir və bunlara paket xaricindəki digər siniflərdən daxil ola bilmərik. Ancaq başqa bir sinif eyni paket içərisindədirsə, o zaman onlara daxil ola bilərik.
Aşağıdakı nümunədə 2 paket yaratdıq com Dəyişdiricilər və com.AccessModifiers harada sinif Sadə sinif hər hansı bir giriş dəyişdiricisi yoxdur, buna görə də standart dəyişdiricidir. Bu, digər paketlərdən bu sinifin hər hansı bir metoduna və ya dəyişəninə daxil ola bilməyəcəyimiz deməkdir. Bu səbəbdən SimpleClass sinif nümunəsi yaratmağa çalışarkən və metodu əldə edərkən tərtib səhvinə yol veririk.
package com.AccessModifiers; class SimpleClass { void display() { System.out.println("This is a simple class"); } }
package com.Modifers; import com.AccessModifiers.*; public class DefaultClass { public static void main(String[] args) { SimpleClass s = new SimpleClass(); //throws error s.display(); //throws error } }
Exception in thread "main" java.lang.Error: Unresolved compilation problems: The type SimpleClass is not visible The type SimpleClass is not visible The type SimpleClass is not visible at com.Modifers.DefaultClass.main(DefaultClass.java:7)
Bununla birlikdə, onlara eyni paketin müxtəlif sinifləri daxilində daxil ola bilərik. Məsələn, başqa bir sinif yaradırıq Əsas sinif eyni paket daxilində com.AccessModifiers. Bu sinifdən bir nümunə yarada bilərik Sadə sinif və metodu əldə edin ekran. Bunun səbəbi hər iki sinifdədir Sadə sinif və Əsas sinif eyni paket içərisindədir.
package com.AccessModifiers; public class MainClass { public static void main(String[] args) { SimpleClass s = new SimpleClass(); s.display(); } }
This is a simple class
Şəxsi giriş dəyişdiricisi
Açar sözdən istifadə etdikdə xüsusi hər hansı bir dəyişən, metod və ya konstruktordan əvvəl eyni sinif daxilində onun girişinə məhdudiyyət qoyulur. Bu xüsusi üzvlərə fərqli bir sinifdən daxil olmağa çalışsaq, tərtib səhvini atacaq. Bu tip java giriş dəyişdiricisi daha çox məhdudiyyət və təhlükəsizlik təmin edir. Bununla birlikdə, mirasdan istifadə edərək, getter və setter metodları vasitəsilə xüsusi dəyişənlərə daxil ola bilərik. Bu şəkildə bu xüsusi dəyişənlərin dəyərini birbaşa dəyişə bilmərik.
Aşağıda, sinif xaricində xüsusi bir metod və xüsusi bir dəyişənə giriş nümunəsi verilmişdir. Belə bir vəziyyətdə, aşağıda göstərildiyi kimi bir tərtib səhvini atır.
package com.AccessModifiers; class PrivateClass { private String value = "Java"; private void display() { System.out.println("This is a private method"); } } public class PrivateClassDemo { public static void main(String[] args) { PrivateClassDemo p =new PrivateClassDemo(); p.display(); //compilation error System.out.println(p.value); //compilation error } }
Exception in thread "main" java.lang.Error: Unresolved compilation problems: The method display() is undefined for the type PrivateClassDemo value cannot be resolved or is not a field at com.AccessModifiers.PrivateClassDemo.main(PrivateClassDemo.java:15)
Bu xüsusi üzvlərə aşağıda göstərildiyi kimi eyni sinifdə daxil ola bilərik.
package com.AccessModifiers; public class PrivateClassDemo { private String value; private void display(String v) { System.out.println(value); } public static void main(String[] args) { PrivateClassDemo p =new PrivateClassDemo(); p.value = "Java"; p.display(p.value); } }
Java
Aşağıda bir şəxsi nümunəsi verilmişdir konstruktor. Xüsusi bir konstruktor yaratsaq, o zaman bu konstruktor üçün bir nümunə yarada bilmərik. Ayrıca, bir yuva içində olan bir sinif olmadığı təqdirdə bir sinfi özəl edə bilmərik.
package com.AccessModifiers; class PrivateClass { private PrivateClass() { System.out.println("This is a private constructor"); } } public class PrivateClassDemo { public static void main(String[] args) { PrivateClass p = new PrivateClass(); } }
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The constructor PrivateClass() is not visible at com.AccessModifiers.PrivateClassDemo.main(PrivateClassDemo.java:18)
Qorunan giriş dəyişdiricisi
Açar sözdən istifadə etdikdə müdafiə hər hansı bir dəyişən, metod və ya qurucudan əvvəl bu qorunan üzvlərin əhatə dairəsi yalnız paket içərisindədir. Bu tip java giriş dəyişdiricisinə xaricdəki bir sinifdən daxil olmağımız lazımdırsa paketi, onda yalnız miras yolu ilə mümkündür.
Qorunan bir giriş dəyişdiricisi, standart giriş dəyişdiricisindən daha çox əlçatanlıq təmin edir.
Aşağıdakı nümunədə, 2 paketdə qorunan bir dəyişən və qorunan bir metod olduğumuz 1 fərqli paket yaratdıq. Buna paketin xaricindəki fərqli bir sinifdən daxil olmaq üçün mirasa nail olmaq üçün istifadə edə bilərik. Qorunan üzvlərə miras olmadan daxil olmağa çalışsaq, tərtib səhvini alacağıq.
// Paket: com.AccessModifiers
package com.AccessModifiers; public class ProtectedClass { protected String value; protected void display() { System.out.println("This is a protected method"); } }
// Paket: com.Modifikatorlar
package com.Modifers; import com.AccessModifiers.*; public class DefaultClass extends ProtectedClass{ public static void main(String[] args) { DefaultClass p = new DefaultClass(); p.value = "Protected"; System.out.println("String value: " + p.value); p.display(); } }
String value: Protected This is a protected method
İctimai giriş dəyişdiricisi
Sizlə tanış ola bilərsiniz ictimai bir çoxunda istifadə etdiyimiz kimi açar söz java proqramı təlimat boyunca nümunələr. İctimai giriş dəyişdiricisi sinifdə və ya paketdə hər yerdə tam əlçatanlığı təmin edir və heç bir məhdudiyyət yoxdur. Bu, ümumiyyətlə istifadə etdiyimiz ən geniş yayılmış java giriş dəyişdiricisidir.
Aşağıda ümumi sinif, metod və dəyişən nümunəsi verilmişdir. 2 fərqli paket yaratdıq. Dəyişən, metod və sinif hər kəsə açıq olduğundan, onları genişləndirmədən də paket xaricindəki fərqli bir sinifdən asanlıqla əldə edə bilərik.
// Paket: com.AccessModifiers
package com.AccessModifiers; public class PublicClass { public String value; public void display() { System.out.println("This is a public method"); } }
// Paket: com.Modifikatorlar
package com.Modifers; import com.AccessModifiers.*; public class MainClass { public static void main(String[] args) { PublicClass p = new PublicClass(); p.value = "Public"; System.out.println("String value: " + p.value); p.display(); } }
String value: Public This is a public method
Metod Yeniləməsində Giriş Dəyişdiricisi
Ləğv etdiyimiz zaman a üsul java giriş dəyişdiricisi istifadə edərək alt sinifdəki metod, ana sinif metodundan daha məhdudlaşdırıcı olmamalıdır. Başqa sözlə, görmə qabiliyyətini azalda bilmərik. Bu vəziyyətdə, bir tərtib səhvi ilə nəticələnəcəkdir. Zəhmət olmasa bizim Javada polimorfizm dərslik, metodu ləğv etmə haqqında daha çox məlumat əldə etmək.
Aşağıdakı nümunədə PublicClass-da ümumi bir metod yaratdıq ekran.
package com.AccessModifiers; public class PublicClass { public String value; public void display() { System.out.println("This is a public method"); } }
İndi MainClass-da, standart bir giriş dəyişdiricisi ilə ekran metodunu ləğv etdik. Varsayılan dəyişdirici kütlədən daha məhdudlaşdırıcı olduğundan, tərtib səhvini atır.
package com.Modifers; import com.AccessModifiers.*; public class MainClass extends PublicClass{ void display() { System.out.println("Default method"); } public static void main(String[] args) { MainClass m = new MainClass(); m.display(); } }
Exception in thread "main" java.lang.Error: Unresolved compilation problem: Cannot reduce the visibility of the inherited method from PublicClass at com.Modifers.MainClass.display(MainClass.java:6) at com.Modifers.MainClass.main(MainClass.java:12)