Sobes.tech
Junior

Bir programlama dilinde 'protected' erişim belirteci nedir ve hangi durumlarda kullanılmalıdır?

sobes.tech yapay zeka

AI'dan gelen yanıt

protected — erişim belirtecidir ve bir sınıfın üyelerinin (alanlar, metodlar) sınıf içinde, kalıtılan sınıflarda (hatta farklı bir paket içinde olsalar bile) ve aynı paketteki tüm sınıflarda erişilebilir olmasını sağlar.

Uygulama:

Sadece kalıtım alanlarına ve aynı paketteki diğer sınıflara sınıf üyelerine erişim sağlamak istediğinizde kullanılır, böylece bu üyeler dış dünyadan, bu paket ve kalıtım hiyerarşisi dışında gizlenir.

Kullanım senaryosu örnekleri:

  • Üst sınıfın, iç uygulama parçası olan alanlar veya metodlar içerdiği durumlarda, bunlar kalıtım alanlarında fonksiyonelliği genişletmek için gereklidir.

    public class Animal {
        protected String name; // Kalıtım alanlarına ve aynı paketteki sınıflara erişilebilir
    
        protected void eat() { // Kalıtım alanlarına ve aynı paketteki sınıflara erişilebilir
            System.out.println(name + " yemek yiyor.");
        }
    }
    
    public class Dog extends Animal {
        public void bark() {
            System.out.println(name + " havlıyor."); // protected alan name erişimi
            eat(); // protected metod eat() erişimi
        }
    }
    
  • Bir pakette, birbirine sıkı sıkıya bağlı sınıf grupları varsa ve bunların birbirlerinin iç öğelerine erişimi olması gerekiyorsa, ancak diğer paketlerdeki sınıflardan gizlenmeleri gerekiyorsa. Bu durumda, protected aynı paketteki sınıflar için varsayılan modifikator (package-private) gibi çalışır, ancak herhangi bir paketten kalıtım alanlara erişimi de açar.

    // com.example.core paketi
    package com.example.core;
    
    public class BaseConfig {
        protected int threshold = 10; // com.example.core içindeki sınıflar ve herhangi bir paketten kalıtım alanlar tarafından erişilebilir
    }
    
    // com.example.app paketi (başka bir paket olabilir)
    package com.example.app;
    
    import com.example.core.BaseConfig;
    
    public class AppConfig extends BaseConfig {
        public void displayThreshold() {
            System.out.println("Eşik değeri: " + threshold); // başka bir paketten protected alan erişimi
        }
    }
    
    // com.example.core paketi
    package com.example.core;
    
    public class RelatedConfig {
         public void printBaseThreshold(BaseConfig config) {
             System.out.println("RelatedConfig'ten temel eşik değeri: " + config.threshold); // aynı pakette protected alan erişimi
         }
    }
    

Aşırı protected kullanmaktan kaçının, çünkü bu, yeniden düzenlemeyi zorlaştırabilir ve kapsüllemeyi bozabilir; kalıtım alanlarına veya aynı paketteki sınıflara, nesnenin iç durumunu doğrudan manipüle etme izni verir. Doğrudan kalıtım ve iç uygulamaya erişim ana hedef değilse, private ve genel getter/setter metodları kullanmak daha iyidir.