- 16 Tem 2016
- 1,475
- 105

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 Belirleyici | Sınıf içi erişim | Paket içi Erişim | Paket Dışından Kalıtım ile Erişim | Paket Dışından Erişim |
public | Erişir | Erişir | Erişir | Erişir |
default | Erişir | Erişir | Erişemez | Erişemez |
protected | Erişir | Erişir | Erişir | Erişemez |
private | Erişir | Erişemez | Erişemez | Erişemez |
Ş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.
- Constructor adı, sınıfın adıyla aynı olmalıdır.
- Constructor geriye değer döndürmez.
- Constructorlar, new anahtar kelimesiyle bir nesne oluşturulduğunda otomatik olarak çağrılır.
- 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:
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);
}
}
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());
}
}
Ufak tadında bırakmak istedim. Kendinize iyi bakın okuduğunuz için teşekkürler.