verdigin ornekte bikac kafa karisikligini gideryim;
"new" anahtar kelimse bir class dan obje olustrmak icin kullanir. Bu objeyi olustururken de o class icinde tanimli constructor kullanir.
public class Isim {
public Isim(){
}
}
yani bu ornekte "new Isim()" dediginde isim classina gider ve isim() constructorunu kullanarak bir obje olusturur. (Not: consructor ve class birebir ayni isme sahip olmali ve ikisinde de ilk harf hep buyuk olmali. )
constructor iki turlu tanimlanir, acik(explicit) veya kapali(implicit) seklinde. yani sen bu sekilde
public class Isim {
}
bir class yazdin, ama hicbir constructor yazmadin icine, java compiler derleme sirasinda otomatik olarak default constructor olusturur ve senin classini bu sekilde cevirir.
public class Isim {
public Isim(){
}
}
ama dilersen sen bu implicit(kapali) yontemi degilde acik acik (explicit) sekilde kendinde yazabilirsin. bu durumda java compiler derleme sirasinda default constructor olusturmaktan vazgececektir.
bir de bazi durumlarda mevcut constructor sana yeterli olmayabilir. ornegin yeni bir isim objesi olusturacaksin ama bu isim objesi bir rakam almak durumunda ve o rakamai gondermelisin.
new Isim(123); gibi.
yani sen Isim classini cagiracaksin ama constructror bir parametre alamali. bu durumda mevct constructor icin "overload" constructor yazmalisin. Ornegin;
public class Isim {
public Isim(){}
public Isim(int sayi){}
}
yani artik Isim sinifi iki tane constructor sahibi olmustur, overload yapilmistir. artik obje yaratirken ister new Isim(); istersen de new Isim(123) cagirarak obje olusturabilirsin.
yani overload yapsan da yapmasan da "new" anahtar kelimesine ihtiyacin var. dikkat et bu yontem "overload", genelde "override" ve "overload" birbirine karisitirilir, is gorusmelerinin populer sorusudur overload ve override farki.
Peki new anahter kelimesi ne gibi durumlarda kullanilmaz. Ornegin "Factory pattern" denilen bir sablon sekli vardir. bu bir static method yardimi ile bir obje doner. bu durumda static methodun oldugu sinifi new anahtar kelimesi ile cagirman gerekmez. Ornegin;
public class Isim {
public static Isim getIsim (){
return new Isim();
}
}
dikkat et burada bir static getIsim diye method var. bu bir method, constructor degil. ama bu method bir new anahtar kelimesi ile Isim objesi olusturup donuyor. eger boyle bir factory methodun var ise
Isim isim = Isim.getIsim();
seklinde hicbir new anahtar kelimesi kullanmadan objeyi alabilirsin, cunku static factory methdo o objeyi icindeki new ile olusturup sana donecektir. sana ise static sinifi cagirmak duser. static siniflar hicbir obje olusturmadan cagirilabilir, yani new anahtar kelimesine ihtiyac yoktur.
ozetle java object oriented bir dil oldugu icin bir obje olusturmak icin mutlaka bir yerde "new" anahtar kelimesi yazmak durumundasin. amam bu kullandigin paterne gore bir static factory method icinde bir defa yazarak da olur, ya da her bir obje olusturmak icin ayri ayri yazarak ta olur.
0