Java
Dinamik bağlama
Çalışma zamanında hangi metodun çağrıldığını öğrenirsin.
Dinamik bağlama nasıl çalışır?
Dinamik bağlama, metodun derleme zamanında değil çalışma zamanında seçilmesidir. Derleyici yalnızca referans türünün metodu bildirdiğini denetler; hangi kodun çalışacağına JVM karar verir.
Bir listede farklı türleri üst sınıf olarak topladığında her eleman kendi area metodunu çağırır. for (Shape s : shapes) s.area() döngüsü her tür için doğru sonucu üretir; bu, polimorfizmin gücüdür.
Override koşulları
Alt sınıftaki metodun üst sınıftaki metodu geçersiz kılabilmesi için imzası birebir eşit olmalı: aynı ad, aynı parametre listesi, uyumlu dönüş türü. @Override annotation'ı kullanmak zorunlu değildir ama derleme hatasını erken yakalar.
Erişim seviyesi daraltılamaz; üst sınıf protected ise alt sınıf public olabilir ama private olamaz. Metot final ise override edilemez.
Uygulama Shape listesinde dinamik bağlama
Üstteki Shape ve Square tanımlarına bir de class Triangle extends Shape ekle: int base, int height, yapıcı ve area metodu return base * height / 2; ile. Sonra main içinde List<Shape> shapes = new ArrayList<>(); oluştur, içine new Square(4) ve new Triangle(6, 4) ekle, for-each ile her birinin area sonucunu ayrı satırda yazdır.
Örnek çözümü göster
class Shape {
int area() { return 0; }
}
class Square extends Shape {
int side;
Square(int side) { this.side = side; }
int area() { return side * side; }
}
class Triangle extends Shape {
int base;
int height;
Triangle(int b, int h) { this.base = b; this.height = h; }
int area() { return base * height / 2; }
}
public class Main {
public static void main(String[] args) {
List<Shape> shapes = new ArrayList<>();
shapes.add(new Square(4));
shapes.add(new Triangle(6, 4));
for (Shape s : shapes) {
System.out.println(s.area());
}
}
}
Kendini test et
-
Döngü başlığını tamamla
for (Shape s : ____) {
System.out.println(s.area());
}
Cevabı göster
for (Shape s : shapes) {
System.out.println(s.area());
}
-
Aşağıdakilerden hangisi override koşuludur?
- Dönüş türü rastgele seçilebilir
- İmza (ad ve parametreler) birebir eşit olmalı
- Erişim seviyesi daraltılabilir
- Final metotlar override edilebilir
Cevabı göster
İmza (ad ve parametreler) birebir eşit olmalı — Override için imza birebir eşit olmalıdır.
-
Override koşullarını eşleştir
- @Override
- Derleme zamanı denetim annotation'ı
- final
- Override'i engeller
- protected
- Alt sınıfta public olabilir
- private
- Override dışında kalır
Sıradaki ders: Geçersiz kılma kuralları