Sobes.tech
Junior

Proqramlaşdırma dilində 'protected' giriş modifikatoru nədir və hansı hallarda istifadə edilməlidir?

sobes.tech Süni İntellekt

AI-dan cavab

protected — bu giriş modifikatorudur və sinfin üzvlərinin (sahələr, metodlar) sinfin daxilində, irsi sinflərdə (hatta fərqli paketdə olsa belə) və eyni paketdəki bütün sinflərdə əlçatan olmasına imkan verir.

Tətbiq sahəsi:

Bu, sinfin üzvlərinə yalnız onun irsi və eyni paketdəki digər sinflərə giriş təmin etmək və onları bu paket və irsi hierarxiyadan kənarda gizlətmək istədiyiniz zaman istifadə olunur.

İstifadə nümunələri:

  • Əsas sinif daxili həyata keçirilməsinin bir hissəsi olan sahələr və ya metodlar ehtiva edir, lakin irsi siniflərdə funksionallığı genişləndirmək üçün vacibdir.

    public class Animal {
        protected String name; // İrsi və eyni paketdəki sinflər üçün əlçatan
    
        protected void eat() { // İrsi və eyni paketdəki sinflər üçün əlçatan
            System.out.println(name + " yemək yeyir.");
        }
    }
    
    public class Dog extends Animal {
        public void bark() {
            System.out.println(name + " havlayır."); // protected sahəyə giriş
            eat(); // protected metoda giriş
        }
    }
    
  • Bir paketdə bir-biri ilə sıx bağlı olan sinf qrupları varsa və onların bir-birinin daxili elementlərinə giriş imkanı olmalıdır, lakin digər paketlərdəki sinflərdən gizlənməlidir. Bu halda, protected eyni paketdəki sinflər üçün varsayılan (package-private) kimi işləyir, lakin hər hansı paketdən irsi siniflərə də giriş açır.

    // com.example.core paketi
    package com.example.core;
    
    public class BaseConfig {
        protected int threshold = 10; // com.example.core daxilindəki sinflər və hər hansı pakətdən irsi siniflər üçün əlçatan
    }
    
    // com.example.app paketi (başqa paketdə ola bilər)
    package com.example.app;
    
    import com.example.core.BaseConfig;
    
    public class AppConfig extends BaseConfig {
        public void displayThreshold() {
            System.out.println("Eşik dəyəri: " + threshold); // başqa paketdən protected sahəyə giriş
        }
    }
    
    // com.example.core paketi
    package com.example.core;
    
    public class RelatedConfig {
         public void printBaseThreshold(BaseConfig config) {
             System.out.println("RelatedConfig-dən əsas eşi: " + config.threshold); // eyni paketdə protected sahəyə giriş
         }
    }
    

protected-in çox istifadəsindən çəkinin, çünki bu, refaktorinqi çətinləşdirə və inkapsulyasiyanı poza bilər, irsi və ya eyni paketdəki sinflərə obyektin daxili vəziyyətinə birbaşa müdaxiləyə imkan verir. Birbaşa irsi və daxili həyata keçirməyə giriş əsas məqsəd deyilsə, private və ictimai getter/setter metodlarından istifadə etmək daha yaxşıdır.