Java'da Erişim Belirleyicileri

xavier eckert

Basın&Medya Ekibi Kıdemli
16 Tem 2016
1,628
273
i-code-java-300x352-3854596.png

Selam dostlar Nesnel yönelimli programlamanın önemli ve temel kısımlarından erişim belirleyicileri hakkında bilgi vermeye çalışacağım. Nesnel yönelimli programlamayı bildiğinizi varsayarak direkt konuya gireceğim.

4 Tip erişim belirleyici vardır.

  • Public: Söz konusu elemanı bir class veya bir metot olabilir. Bu elemana her yerden ulaşabiliriz.
  • Protected: Söz konusu elemana kendi sınıfından ve kalıtım almış alt sınıflardan ulaşabiliriz.
  • Private: Söz konusu elemana sadece kendi sınıfından ulaşabiliriz.
  • Default: Herhangi bir şey yazmazsak default olarak kabul olacaktır. Tabi isterseniz default olarak yazabiliriz. Söz konusu elemana aynı paket ve aynı sınıftan ulaşabiliriz.
Erişim belirleyicileri sayesinde sınıflar ve metotlar arasında hiyerarşiyi sağlarız. Hangi metotlara veya sınıflara erişilmesinin ne düzeyde olacağını belirleriz.

Erişim BelirleyiciSınıf içi erişimPaket içi ErişimPaket Dışından Kalıtım ile ErişimPaket Dışından Erişim
publicErişirErişirErişirErişir
defaultErişirErişirErişemezErişemez
protectedErişirErişirErişirErişemez
privateErişirErişemezErişemezErişemez

OIP.5nwykY7YN5LSW4ZoSvd-BwHaDL

Şimdi bir Account adında sınıf oluşturalım özellikleri aşağıdaki gibi

Java:
public class Account {
private int id;
private String url;
public String nickname;
public int messages ;
private boolean isModerator;
}



Bir Hesap sınıfımız var ve bu sınıfın id, url, nickname, messages, isModerator gibi özellikler ekledim. Bazı değişkenleri private olarak atadım çünkü bu bilgiye başka sınıflardan ulaşılmasını istemiyorum. Bu sınıf üzerinden istediğimiz kadar nesne oluşturabiliriz.

Java:
public class Main {
public static void main(String[] args) {
Account account1 = new Account();
account1.nickname = "xavier eckert";
account1.messages = 1410;
}
}



Main class içerisinde Sınıfımızı çağırdık ve nesnemizi oluşturduk. Kendiniz denerseniz Account1 nesnesinin sadece public olan değişkenlerine ulaşabiliyoruz. Private olan değerlere erişemiyoruz. Fakat id, url ve isModerator değişkenlerine atama yapmak istiyoruz nasıl yapabiliriz? İki yolu var Constructor kullanarak ve getter/setter kullanarak.

Peki nedir Constructor?
Constructor bir nesneyi oluşturduğumuzda çalışan metottur. Bu metot sayesinde oluşturulan nesnenin başlangıç değerlerine sahip olması sağlanır. Constructor yani yapıcı metodun özellikleri şunlardır.

  1. Constructor adı, sınıfın adıyla aynı olmalıdır.
  2. Constructor geriye değer döndürmez.
  3. Constructorlar, new anahtar kelimesiyle bir nesne oluşturulduğunda otomatik olarak çağrılır.
  4. Birden fazla constructor tanımlanabilir, bu durumda bu duruma constructor overloading denir.

Java:
public class Account {

public Account(int id, String url, String nickname, int messages,boolean isModerator){
this.id = id;
this.url = url;
this.nickname = nickname;
this.messages = messages;
this.isModerator = isModerator;
}
private int id;
private String url;
public String nickname;
public int messages ;
private boolean isModerator;

}



public class Main {
public static void main(String[] args) {
Account account1 = new Account(1,"xavier-eckert.802006","xavier eckert",1410,true);
}
}


Kullandığım this kelimesi sınıfın içerisindeki değeri çağırmamızı sağlıyor. Yani yapıcı metot sayesinde parametre olarak gönderdiğimiz değerleri sınıfımızın içerisindeki değişkenlerin değerlerine atamış olduk.

Burada bütün atamaları Yapıcı metot üzerinden yaptık fakat bu atama daha iyi bir şekilde düzenlenebilir.

Peki daha iyi bir şekilde nasıl yapabiliriz. Getter/Setter kullanarak private ve public değişkenlerimize değer ataması yapabiliriz.

Kullandığınız IDE’ye bağlı olarak kolayce Getter/Setter oluşturabilirsiniz. Burada ben Intellij Idea kullanıyorum. Kod üstünde sağ tıklıyorum. Generate.. -> Getter and Setter tıklıyoruz ve hepsini seçiyoruz. Burada yaptığımız şey her bir değişkene dışardan okuma ve değiştirme kolaylığını sağlıyoruz. Şimdi kodumuzu revize edelim ve kafalardaki soruları kaldıralım.

Java:
public class Account {

public Account(){

}
public Account(int id, String url, String nickname, int messages,boolean isModerator){
this.id = id;
this.url = url;
this.nickname = nickname;
this.messages = messages;
this.isModerator = isModerator;

}
private int id;
private String url;
public String nickname;
public int messages ;
private boolean isModerator;


public int getId() {
return id;
}


public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getNickname() {
return nickname;
}

public void setNickname(String nickname) {
this.nickname = nickname;
}

public int getMessages() {
return messages;
}

public void setMessages(int messages) {
this.messages = messages;
}

public boolean isModerator() {
return isModerator;
}

public void setModerator(boolean moderator) {
isModerator = moderator;
}
}



public class Main {
public static void main(String[] args) {
Account account1 = new Account();
account1.setId(1);
account1.setNickname("xavier eckert");
account1.setMessages(1410);
account1.setModerator(true);
account1.setUrl("/xavier-eckert.802006");
}
}


Burada bir yapıcı daha ekledim. Nesnemizi oluşturacağımız zaman hem parametreli hem parametresiz olarak çağırmamıza olanak sağladım.
Biraz da kalıtım konusuna girersek erişim belirleyicilerin ne yaptığını anlayabiliriz.
java-types-of-inheritance.jpg


what-is-inheritance-in-java3-l.jpg
Java:
public class BankAccount {
public float getBalance() {
return balance;
    }

public void setBalance(float balance) {
this.balance = balance;
    }

private float balance;

public void withdraw(float balance){
if (balance<=0  || balance>this.balance){
System.out.println("Paran yok hemşerim");
        }
this.balance = this.balance -balance;
    }
}
Java:
public class Main {
public static void main(String[] args) {
BankAccount bankAccount = new BankAccount();
bankAccount.setBalance(1100);
bankAccount.withdraw(1200);
    }
}
Özetle Java'da bir sınıfın özelliklerini private yani dışarıdan erişilemeyecek şekilde yazıyoruz. Bu değerlere aynı sınıfın içerisinde public olarak get ve set metotlarıyla erişiyoruz.

Java:
public class Car {

private int id;
private String brand;
private String model;
private String color;
private int year;
public int getId() {
return id;
    }

public void setId(int id) {
this.id = id;
    }
public String getBrand() {
return brand;
    }

public void setBrand(String brand) {
this.brand = brand;
    }

public String getModel() {
return model;
    }

public void setModel(String model) {
this.model = model;
    }

public String getColor() {
return color;
    }

public void setColor(String color) {
 this.color = color;
    }

public int getYear() {
return year;
    }

public void setYear(int year) {
this.year = year;
    }

@Override
    public String toString() {
return "Car{" +
"id=" + id +
", model='" + model + '\'' +
", brand=" + brand + '\''+
", Color='" + Color + '\'' +
", year=" + year + '\''+
 '}';
    }
}

Java:
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.setId(1);
car.setColor("Red");
car.setBrand("Honda");
car.setModel("1.6i VTEC Eco Elegance");
car.setYear(2012);
System.out.println(car.toString());
    }
}
Burada ise bir araba sınıfının özelliklerini getter ve setter ile eriştik, ek olarak toString metodu ile konsola json şeklinde yazılmasını sağladık.
Ufak tadında bırakmak istedim. Kendinize iyi bakın okuduğunuz için teşekkürler.
 

egemizah

Katılımcı Üye
19 Şub 2021
865
430
i-code-java-300x352-3854596.png

Selam dostlar Nesnel yönelimli programlamanın önemli ve temel kısımlarından erişim belirleyicileri hakkında bilgi vermeye çalışacağım. Nesnel yönelimli programlamayı bildiğinizi varsayarak direkt konuya gireceğim.

4 Tip erişim belirleyici vardır.

  • Public: Söz konusu elemanı bir class veya bir metot olabilir. Bu elemana her yerden ulaşabiliriz.
  • Protected: Söz konusu elemana kendi sınıfından ve kalıtım almış alt sınıflardan ulaşabiliriz.
  • Private: Söz konusu elemana sadece kendi sınıfından ulaşabiliriz.
  • Default: Herhangi bir şey yazmazsak default olarak kabul olacaktır. Tabi isterseniz default olarak yazabiliriz. Söz konusu elemana aynı paket ve aynı sınıftan ulaşabiliriz.
Erişim belirleyicileri sayesinde sınıflar ve metotlar arasında hiyerarşiyi sağlarız. Hangi metotlara veya sınıflara erişilmesinin ne düzeyde olacağını belirleriz.

Erişim BelirleyiciSınıf içi erişimPaket içi ErişimPaket Dışından Kalıtım ile ErişimPaket Dışından Erişim
publicErişirErişirErişirErişir
defaultErişirErişirErişemezErişemez
protectedErişirErişirErişirErişemez
privateErişirErişemezErişemezErişemez

OIP.5nwykY7YN5LSW4ZoSvd-BwHaDL

Şimdi bir Account adında sınıf oluşturalım özellikleri aşağıdaki gibi

Java:
public class Account {
private int id;
private String url;
public String nickname;
public int messages ;
private boolean isModerator;
}



Bir Hesap sınıfımız var ve bu sınıfın id, url, nickname, messages, isModerator gibi özellikler ekledim. Bazı değişkenleri private olarak atadım çünkü bu bilgiye başka sınıflardan ulaşılmasını istemiyorum. Bu sınıf üzerinden istediğimiz kadar nesne oluşturabiliriz.

Java:
public class Main {
public static void main(String[] args) {
Account account1 = new Account();
account1.nickname = "xavier eckert";
account1.messages = 1410;
}
}



Main class içerisinde Sınıfımızı çağırdık ve nesnemizi oluşturduk. Kendiniz denerseniz Account1 nesnesinin sadece public olan değişkenlerine ulaşabiliyoruz. Private olan değerlere erişemiyoruz. Fakat id, url ve isModerator değişkenlerine atama yapmak istiyoruz nasıl yapabiliriz? İki yolu var Constructor kullanarak ve getter/setter kullanarak.

Peki nedir Constructor?
Constructor bir nesneyi oluşturduğumuzda çalışan metottur. Bu metot sayesinde oluşturulan nesnenin başlangıç değerlerine sahip olması sağlanır. Constructor yani yapıcı metodun özellikleri şunlardır.

  1. Constructor adı, sınıfın adıyla aynı olmalıdır.
  2. Constructor geriye değer döndürmez.
  3. Constructorlar, new anahtar kelimesiyle bir nesne oluşturulduğunda otomatik olarak çağrılır.
  4. Birden fazla constructor tanımlanabilir, bu durumda bu duruma constructor overloading denir.

Java:
public class Account {

public Account(int id, String url, String nickname, int messages,boolean isModerator){
this.id = id;
this.url = url;
this.nickname = nickname;
this.messages = messages;
this.isModerator = isModerator;
}
private int id;
private String url;
public String nickname;
public int messages ;
private boolean isModerator;

}



public class Main {
public static void main(String[] args) {
Account account1 = new Account(1,"xavier-eckert.802006","xavier eckert",1410,true);
}
}


Kullandığım this kelimesi sınıfın içerisindeki değeri çağırmamızı sağlıyor. Yani yapıcı metot sayesinde parametre olarak gönderdiğimiz değerleri sınıfımızın içerisindeki değişkenlerin değerlerine atamış olduk.

Burada bütün atamaları Yapıcı metot üzerinden yaptık fakat bu atama daha iyi bir şekilde düzenlenebilir.

Peki daha iyi bir şekilde nasıl yapabiliriz. Getter/Setter kullanarak private ve public değişkenlerimize değer ataması yapabiliriz.

Kullandığınız IDE’ye bağlı olarak kolayce Getter/Setter oluşturabilirsiniz. Burada ben Intellij Idea kullanıyorum. Kod üstünde sağ tıklıyorum. Generate.. -> Getter and Setter tıklıyoruz ve hepsini seçiyoruz. Burada yaptığımız şey her bir değişkene dışardan okuma ve değiştirme kolaylığını sağlıyoruz. Şimdi kodumuzu revize edelim ve kafalardaki soruları kaldıralım.

Java:
public class Account {

public Account(){

}
public Account(int id, String url, String nickname, int messages,boolean isModerator){
this.id = id;
this.url = url;
this.nickname = nickname;
this.messages = messages;
this.isModerator = isModerator;

}
private int id;
private String url;
public String nickname;
public int messages ;
private boolean isModerator;


public int getId() {
return id;
}


public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getNickname() {
return nickname;
}

public void setNickname(String nickname) {
this.nickname = nickname;
}

public int getMessages() {
return messages;
}

public void setMessages(int messages) {
this.messages = messages;
}

public boolean isModerator() {
return isModerator;
}

public void setModerator(boolean moderator) {
isModerator = moderator;
}
}



public class Main {
public static void main(String[] args) {
Account account1 = new Account();
account1.setId(1);
account1.setNickname("xavier eckert");
account1.setMessages(1410);
account1.setModerator(true);
account1.setUrl("/xavier-eckert.802006");
}
}


Burada bir yapıcı daha ekledim. Nesnemizi oluşturacağımız zaman hem parametreli hem parametresiz olarak çağırmamıza olanak sağladım.
Biraz da kalıtım konusuna girersek erişim belirleyicilerin ne yaptığını anlayabiliriz.
java-types-of-inheritance.jpg


what-is-inheritance-in-java3-l.jpg
Java:
public class BankAccount {
public float getBalance() {
return balance;
    }

public void setBalance(float balance) {
this.balance = balance;
    }

private float balance;

public void withdraw(float balance){
if (balance<=0  || balance>this.balance){
System.out.println("Paran yok hemşerim");
        }
this.balance = this.balance -balance;
    }
}
Java:
public class Main {
public static void main(String[] args) {
BankAccount bankAccount = new BankAccount();
bankAccount.setBalance(1100);
bankAccount.withdraw(1200);
    }
}
Özetle Java'da bir sınıfın özelliklerini private yani dışarıdan erişilemeyecek şekilde yazıyoruz. Bu değerlere aynı sınıfın içerisinde public olarak get ve set metotlarıyla erişiyoruz.

Java:
public class Car {

private int id;
private String brand;
private String model;
private String color;
private int year;
public int getId() {
return id;
    }

public void setId(int id) {
this.id = id;
    }
public String getBrand() {
return brand;
    }

public void setBrand(String brand) {
this.brand = brand;
    }

public String getModel() {
return model;
    }

public void setModel(String model) {
this.model = model;
    }

public String getColor() {
return color;
    }

public void setColor(String color) {
 this.color = color;
    }

public int getYear() {
return year;
    }

public void setYear(int year) {
this.year = year;
    }

@Override
    public String toString() {
return "Car{" +
"id=" + id +
", model='" + model + '\'' +
", brand=" + brand + '\''+
", Color='" + Color + '\'' +
", year=" + year + '\''+
 '}';
    }
}

Java:
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.setId(1);
car.setColor("Red");
car.setBrand("Honda");
car.setModel("1.6i VTEC Eco Elegance");
car.setYear(2012);
System.out.println(car.toString());
    }
}
Burada ise bir araba sınıfının özelliklerini getter ve setter ile eriştik, ek olarak toString metodu ile konsola json şeklinde yazılmasını sağladık.
Ufak tadında bırakmak istedim. Kendinize iyi bakın okuduğunuz için teşekkürler.
Elinize emeginize saglık Hocam
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.