Polimorfizm temelleri
- Java kursu
- Orta seviye
- Ders 59/116
- 5 dk
Üst sınıf referansı ile alt sınıf nesnesini öğrenirsin.
Polimorfizm temelleri
Polimorfizm, bir üst sınıf referansının alt sınıf nesnesini tutabilmesidir. Java'da tüm normal metotlar sanaldır (virtual); çağrı nesnenin gerçek türüne göre çalışır. Shape s = new Circle(); satırı geçerlidir; s.area() çağrısı Circle sınıfındaki metodu çalıştırır. Buna dinamik bağlama denir.
Aynı kod farklı türler için farklı davranır; yeni bir alt sınıf eklemek üst sınıfı kullanan kodu bozmaz.
Sanal metot çağrısı
Bir üst sınıf referansı üzerinden metot çağırdığında Java referansın türüne değil, nesnenin çalışma zamanı türüne bakar. Shape s = new Circle(); yazdıysan s.area() her zaman Circle'ın area metodunu çağırır.
Bunun sırrı vtable denilen sanal metot tablosudur; her nesne türü için doğru metot kaydı tutulur. Override edilen metotlar otomatik dinamik bağlanır; Java'da ayrı bir virtual anahtar kelimesi yoktur.
Uygulama Shape ve Square sınıflarını yaz
Basit bir polimorfizm örneği yaz. class Shape tanımla; içinde int area() { return 0; } metodu olsun. Sonra class Square extends Shape tanımla; int side alanı, Square(int side) yapıcısı ve override edilmiş area metodu (return side * side;) ekle. main içinde Shape s = new Square(5); ile bir kare oluştur ve System.out.println("Alan: " + s.area()); ile alanı yazdır.
Başlangıç kodu
// Shape sınıfını tanımla: area 0 döner
// Square sınıfı Shape'i miras alır; area override edilir
// Bir Square örneğini Shape olarak ata ve alanı yazdırÖrnek çözüm
class Shape {
int area() { return 0; }
}
class Square extends Shape {
int side;
Square(int side) { this.side = side; }
int area() { return side * side; }
}
public class Main {
public static void main(String[] args) {
Shape s = new Square(5);
System.out.println("Alan: " + s.area());
}
}Beklenen çıktı
Alan: 25
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Shape s = new Circle(); satırı neyi gösterir?
- Polimorfik atama; üst referans alt nesneyi tutar Doğru cevap
- Çoklu kalıtım; iki sınıftan miras alır
- Generic tür parametresi tanımlar
- Static metot çağrısı yapar
Açıklama: Üst sınıf referansı alt sınıf nesnesini tutar; bu polimorfizmin temelidir.
2 Alt sınıf bildirimini tamamla
class Circle ____ Shape {
double area() { return Math.PI * r * r; }
}
class Circle extends Shape {
double area() { return Math.PI * r * r; }
}
Açıklama: extends anahtar kelimesi sınıf mirasını bildirir.
3 Polimorfizm kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
virtual |
Java'da varsayılan metot davranışı |
override |
Alt sınıfta metodu yeniden tanımlama |
extends |
Sınıf mirasını bildirir |
super |
Üst sınıf referansı |