Java'da Polymorphism
Farkli nesneleri ebeveyn tipindeki bir degiskende tutun boylece tek bir cagri adi farkli govdeleri calistirabilsin. Machine uzerinde horn metodunu tone basacak sekilde tutun. Truck uzerinde horn metodunu honk basacak sekilde yeniden yazin. Car uzerinde horn metodunu beep basacak sekilde yeniden yazin. Yard.java icinde Machine m = new Machine();, Machine t = new Truck(); ve Machine c = new Car(); atayin, sonra her birinde horn cagirin. javac Yard.java ile derleyin ve java Yard calistirin. Ekran tone, sonra honk, sonra beep gostermelidir. Ikinci demo yalnizca iki cocugu Machine referansi olarak tutar. equals konusunu bir sonraki sayfaya birakin — bu ders cok bicimli tutan tek ebeveyn tipidir.
Bir ebeveyn tip, uc horn govdesi
Abstract sayfasi cocuklarin doldurmasi icin bir metodu bitmemis birakti. Bu sayfa ebeveyn tipindeki degisken uzerinden cagriya odaklanir. Yard.java dosyasini acin. Public sinif adini Yard tutun. Ebeveyn tip hikayesini gomuyorsa kalan abstract-only demolari, kalan enum Level dosyalarini, yol demolarini ve herhangi bir klavye Scanner satirini silin. Program yazma beklememelidir. Import satiri gerekmez.
Normal bir ebeveyni horn govdesiyle bildirin:
class Machine {
void horn() {
System.out.println("tone");
}
}
Cocuklari extends Machine ile ve honk ile beep basan kendi horn govdeleriyle bildirin. Eslesen ad ve bos parametre listesi her cocugun ebeveyn metodunu override ettigi anlamina gelir.
Yard.main icinde bildirilen tipi Machine olan uc degisken olusturun:
Machine m = new Machine();
Machine t = new Truck();
Machine c = new Car();
Sonra cagirin:
m.horn();
t.horn();
c.horn();
Ucunun de bildirilen tipi Machinedir. Gercek nesne hangi horn govdesinin calisacagina karar verir.
class Machine {
void horn() {
System.out.println("tone");
}
}
class Truck extends Machine {
void horn() {
System.out.println("honk");
}
}
class Car extends Machine {
void horn() {
System.out.println("beep");
}
}
public class Yard {
public static void main(String[] args) {
Machine m = new Machine();
Machine t = new Truck();
Machine c = new Car();
m.horn();
t.horn();
c.horn();
}
}
Yard.java dosyasinin bulundugu klasorden javac Yard.java calistirin. Parantezler, suslu parantezler ve noktali virguller uyusunca javac kendi satirini yazmaz. Sonra java Yard calistirin — java Yard.java degil. Calistirma komutundan .java uzantisini birakin. Dosyada tek public sinif tutun boylece ad Yard ile eslesir. Yardimci tipler bu baslangic seklinde public olmadan kalir.
Ekran tone, sonra honk, sonra beep gosterir. Calismayi bir kez adim adim izleyin. Java Yard.main ile baslar. m duz bir Machine tutar, bu yuzden m.horn() tone basar. t degisken tipi Machine dese de bir Truck tutar, bu yuzden t.horn() honk basar. c bir Car tutar, bu yuzden c.horn() beep basar. Ayni cagri yazimi. Uc govde.
Ekran satirini okurken her atamayi isaret edin. Ilk satir duz makineye aittir. Ikinci satir makine tipindeki adin arkasindaki truck nesnesine aittir. Ucuncu satir makine tipindeki adin arkasindaki car nesnesine aittir. Bu eslestirme oyunu tek geciste butun derstir.
Hala abstract demosundan yalnizca honk sonra park goruyorsaniz polymorphism ogretim dosyasina gecin ve java Yard komutunu yeniden calistirin. Her degisken yalnizca Truck veya Car tipindeyse henuz bu sayfanin ebeveyn tip formunu gostermiyorsunuz — demoda atamalarin solunda Machine tipini tutun.
Ekrana bakarken kurali sesli soyleyin: degisken tipi ebeveyn olabilir, nesne cocuk olabilir, cocuk metodu override ettiyse cagri cocugun govdesini calistirir. Bu sayfada bir equals override uydurmayin. O konu sonraki dersi bekler.
Machine referanslariyla iki cocuk
Ikinci program override lari korur. main yalnizca Truck ve Car olusturur, yine Machine olarak saklar ve her birinde horn cagirir.
class Machine {
void horn() {
System.out.println("tone");
}
}
class Truck extends Machine {
void horn() {
System.out.println("honk");
}
}
class Car extends Machine {
void horn() {
System.out.println("beep");
}
}
public class Yard {
public static void main(String[] args) {
Machine t = new Truck();
Machine c = new Car();
t.horn();
c.horn();
}
}
javac Yard.java ile derleyin, sonra java Yard calistirin. Ekran honk, sonra beep gosterir. Bu ikinci demoda duz bir Machine nesnesi yoktur, yine de her iki degisken de Machine tipindedir. Cocuk nesneleri govdeleri saglar. Bu, daha kisa ekranli ayni polymorphism fikridir.
Atama satirlarini bir kez daha okuyun: sol Machine, sag new Truck() veya new Car(). Sol taraf uzerinden cagiracaginiz ebeveyn tipini adlandirir. Sag taraf gercek nesneyi adlandirir. Bu atamalarin yasal kalmasi icin her iki cocukta da extends Machine tutun.
Yakinda kalan abstract demolar varsa onlari tarih olarak saklayin. Bu ders icin polymorphism ogretim dosyasini calistirin boylece ekran ana hikaye olarak tone / honk / beep veya honk / beep gosterir, park degil. javac yinelenen public siniflardan sikayet ederse yalnizca Yard public kalsin.
Hangi horn govdesi calisir
📊 Who runs for each Machine variable
| Variable | Real object | horn prints |
|---|---|---|
m |
Machine |
tone |
t |
Truck |
honk |
c |
Car |
beep |
Abstract doldurmalarla karsilastirma
Abstract sayfasinda Machine, horn metodunu bitmemis birakti ve cocuklar onu doldurdu, siklikla ortak bir park ile. Bu sayfada Machine zaten tone govdesine sahiptir, cocuklar onu override eder ve ebeveyn tipindeki degiskenler nesneleri tutar. Hala Yard.java derler ve java Yard calistirirsiniz. Yeni tokenlar Machine t = new Truck(); gibi ebeveyn tip atamalari ve tek cagri adindan uc farkli basimdir.
Kalan bir abstract dosya hala aciksa abstract void horn(); ve park gorebilirsiniz. Polymorphism dosyasina gecin boylece Machine normal bir horn govdesine sahip olur ve main Machine degiskenlerini farkli nesnelere atar. equals demolarini bu sayfanin disinda tutun. Klavye girisini bu sayfanin disinda tutun.
equals oncesi
Machine degiskenlerini Machine, Truck ve Car nesnelerine atayip tone, sonra honk, sonra beep gorebilirsiniz. Yalnizca iki cocugu Machine referansi olarak tutup honk sonra beep gorebilirsiniz. Tutulan her demo icin sirayla Yard.java derleyin ve java Yard calistirin. Cagri govde sahibini kullandi. Sonraki sayfa equalstir; orada iki nesne ogretim icin guvenli bicimde ayni mi diye karsilastirilir.
Net ebeveyn-arti-cocuklar ekrani icin uc nesneli demoyu tutun. Net ebeveyn tip cifti icin iki cocuklu demoyu tutun. equals dosyalarini bu sayfanin disinda tutun. Bu uc aliskanlik ilerlemeden onceki kontrol noktasidir. Machine tipindeki bir truck degiskeninden honk geldiginde polymorphism bu dersin isini yapmistir ve equals hakkinda sonraki konuya hazirsiniz.
Klasorde son bir tur: bir public Yard, ebeveyn ve cocuk horn govdeleri, main icinde ebeveyn tip degiskenler, klavye beklemesi yok, zorla equals yok. Acik tuttugunuz demoda bir kez daha javac Yard.java ve java Yard calistirin. Ekran hala tabloyla eslesiyorsa cok bicimli cagri saglamdir ve kurs sonraki sayfada equals konusuna gecebilir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek