"Enter"a basıp içeriğe geçin

Java’da Erişim Belirleyiciler (Access Modifiers)

Java’da erşim belirleyiciler; field, method, class ve constructor’ların erişebilirliğini kontrol altına almak amacıyla kullanılırlar. 4 adet erişim belirleyici vardır.

  • private
  • default
  • protected
  • public

Her bir erişim belirleyiciyi ayrı ayrı inceleyelim.

  • Private üyelerin kullanımı:
    private olarak tanımlanmış field’lara, metodlara, class’lara ve constructor’lara class dışından erişilemez.
    private üyelerin kalıtımı(Inheritance):
    private üyeler, sub class’lara (alt sınıflara) miras bırakılamazlar.

    Önemli Not:

    * Class’lar, inner (iç) class’lar hariç private olamaz. Inner class’lar, outer (dış) class’ın üyesi olduğu için private olarak tanımlanabilirler. Bir class’ın üyeleri (field, metod, constructor ve inner class) private olarak tanımlanabilir ancak class’ın kendisi private olamaz.
    * Yanlızca private constructor bulunan classların içine inner class tanımlaması yapılamaz.

    Aşağıdaki örneği inceleyebilirsiniz.

    class A {
        private int i;
     
        private void ClassAMetodu() {
            //Private Metod
            System.out.println(i);  //Private field class içinde kullanılabilir.
            B b = new B();          //Private inner (iç) class, class içinde kullanılabilir
        }
     
        private class B {
            //Private Inner (iç) Class
        }
    }
     
    class C extends A {
        void ClassCMetodu() {
            //System.out.println(i);  Private üye kalıtım ile miras bırakılamaz
            A a = new A();
            //System.out.println(a.i);     Private field, class dışından erişilemez.
            //a.ClassAMetodu();            Private metod sınıf dışında kullanılamaz.
            //A.B b = new A.B();           Private inner (iç) class, class dışından erişilemez.
        }
    }
    private class A
    {
         //Outer (dış) class private olarak tanımlanamaz.
    }
    class A {
        private A() {
            //Private Constructor
        }
     
        private A(int i) {
            //Private constructor
        }
    }
     
    class B extends A {
        //Sadece private constructor'ı olan class içine inner (iç) class tanımlanamaz.
    }
    • Default veya Packagedefault üyelerin kullanımı:
      “default” erişim belirleyicisi ile tanımlanmış üyeler, yanlızca paket içinde erişilebilir ve görünür olurlar. outer (dış) class’lara uygulanabilirler.
      default üyelerin kalıtımı:
      default erişim belirleyicisi ile tanımlanmış üyeler, bulundukları paket içersinde sub class’lara miras bırakılabilirler.
    package paket1;
     
    class A {
        int i;
     
        A() {
            //Default tanımlanmış Constructor
        }
     
        void classAMetodu() {
            //Default tanımlanmış metod
            System.out.println(i);
            B b = new B();
        }
     
        class B {
            //Default tanımlanmış inner (iç) class
        }
    }
     
    class C extends A {
        void classCMetodu() {
            System.out.println(i);        //Default tanımlı field miras olarak sub class'a aktarılır.
     
            A a = new A();
            System.out.println(a.i);     //Default field paket içinde kullanılabilir.
            a.classAMetodu();            //Default method paket içinde kullanılabilir.
            A.B b = new A.B();           //Default inner class paket içinde kullanılabilir.
        }
    }
     
    package paket2;
    //import paket1.A;      A class'ı paket dışından erişilemez durumdadır.
    /*class D extends A      A class'ı paket dışından erişilemez durumdadır.
    {
        void methodOfClassD()
        {
            System.out.println(i);        Default field paket dışına miras bırakılamaz.
            A a = new A();           default Constructor!a paket dışından erişilemez
            System.out.println(a.i);     Default field paket dışında kullanılamaz.
            a.classCMetodu();          Default metod, paket dışında kullanılamaz
            A.B b = new A.B();           Default inner (iç) class, paket dışında kullanılamaz.
        }
    }*/
    • Protectedprotected üyelerin kullanımı:
      protected üyeler yanlızca paket içinde kullanılabilirler.
      protected üyelerin kalıtımı:
      protected üyeler her hangi bir sub class’a miras bırakılabilir.
    package pack1;
     
    public class A {
        protected int i;
     
        protected void classAMetodu() {
            //Protected metod
            System.out.println(i); //Protected field, class içinde kullanılabilir.
            B b = new B();         //Protected Inner Class, class içinde kullanılabilir.
        }
     
        protected class B {
            //Protected Inner Class
        }
    }
     
    class C extends A {
        void classCMetodu() {
            System.out.println(i);        //Protected field, her hangi bir sub class'a miras bırakılabilir.
     
            A a = new A();
            System.out.println(a.i);     //Protected field, paket içinde kullanılabilir.
            a.classAMetodu();          //Protected metod, paket içinde kullanılabilir.
            A.B b = new A.B();           //Protected Inner Class, paket içersinde kullanılabilir.
        }
    }
     
    package pack2;
            import pack1.A;
     
    class D extends A {
        void classDMetodu() {
            System.out.println(i);        //Protected field, her hangi bir sub class'a miras bırakılabilir.
     
            A a = new A();
            //System.out.println(a.i);     Protected field, paket dışında kullanılamaz
            //a.classAMetodu();          Protected metod, paket dışında kullanılamaz
            //A.B b = new A.B();           Protected inner class, paket dışında kullanılamaz
        }
    }

    Önemli Not:

    * Outer (dış) class, protected olarak tanımlanamaz.
    * Constructor’ları protected olarak tanımlanmış bir class içine sub class’lar tanımlanabilir. Ancak paket dışında bu class’ın nesneleri paket dışında oluşturulamazlar.

    • Public

    public üyelerin kullanımı:
    public üyeler her yerde kullanılabilir.
    public üyelerin kalıtımı:
    public üyeler her hangi bir sub class’a miras bırakılabilirler.

    package paket1;
     
    public class A {
        public int i;
     
        public void classAMetodu() {
            //public metod
            System.out.println(i); //public field her yerde kullanılabilir.
            B b = new B();         //public Inner Class her yerde kullanılabilir.
        }
     
        public class B {
            //public Inner Class
        }
    }
     
    class C extends A {
        void classCMetodu() {
            System.out.println(i);        //public field, her yere miras bırakılabilir
     
            A a = new A();
            System.out.println(a.i);     //public field, her yerde kullanılabilir.
            a.classAMetodu();          //public metod, her yerde kullanılabilir.
            A.B b = new A.B();           //public Inner Class her yerde kullanılabilir.
        }
    }
     
    package paket2;
            import paket1.A;
     
    class D extends A {
        void classDMetodu() {
            System.out.println(i);        //public field, her yere miras bırakılabilir
     
            A a = new A();
            System.out.println(a.i);     //Public field, her yerde kullanılabilir.
            a.classAMetodu();          //Public metod,  her yerde kullanılabilir.
            A.B b = new A.B();           //Public inner class,  her yerde kullanılabilir.
        }
    }

    Aşağıda bu anlatılanları özet tablo içerisinde görebilirsiniz.

    Erişim Belirleyici (Access Modifier)Kullanım veya Erişim veya GörünürlükKalıtım (Inheritance)
    privateSadece class içindeMiras bırakılamaz
    defaultSadece paket içindePaket içerisindeki sub class’lara miras bırakılabilir
    protectedSadece paket içindeHerhangi bir sub class’a miras bırakılabilir.
    publicHer yerdeHerhangi bir sub class’a miras bırakılabilir.

    İlk Yorumu Siz Yapın

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir