Bölüm 4 · Simülatör

Dinamik Bağlama: Hangi Metot Çalışır?

← Bölüm 4
r = new();

Sınıf hiyerarşisi

Main.java

    Çalışan metot

      Çıktı (konsol)

      Doğru 0 / 0

      Dinamik Bağlama: Hangi Metot Çalışır?

      Amaç: Hayvan r = new Kopek(); gibi bir satırda iki tip vardır: değişkenin referans tipi (bildirilen tip, Hayvan) ve nesnenin nesne tipi (gerçek tip, Kopek). Bir çağrı iki aşamada çözülür: derleyici referans tipine bakıp "bu metot var mı?" diye sorar; JVM çalışma zamanında nesne tipine bakıp "hangi sürüm?" diye sorar.

      Nasıl kullanılır?

      1. Üstte referans tipini, nesne tipini ve çağrıyı seçin (ya da Rastgele).
      2. Adım ▶ / ◀ Geri (klavyede → / ←), Oynat, Sıfırla. Hiyerarşide kesik mavi çerçeve referans tipini, kırmızı çerçeve nesne tipini gösterir; mavi satırlar derleyicinin, kırmızı satırlar JVM'nin aramasıdır.
      3. Kendini dene: kodun derlenip derlenmeyeceğini, hangi sürümün çalışacağını ve çıktıyı tahmin edin.

      Kurallar

      • Atama yalnızca nesne tipi referans türünün alt türüyse derlenir (Hayvan r = new Kopek(); geçerli, Kopek r = new Hayvan(); değil).
      • Derleyici metodu referans tipinden başlayıp yukarı doğru arar; bulamazsa nesne ne olursa olsun derleme hatası verir.
      • Örnek metotları dinamik bağlanır: JVM aramaya nesnenin gerçek sınıfından başlar ve aşağıdan yukarı ilk bulduğu sürümü çalıştırır. Üst sınıftaki bir metodun içinden yapılan ad() çağrısı da (this.ad()) böyle çözülür.
      • static metotlar ve aşırı yüklenmiş sürümler arasındaki seçim dinamik değildir: derleyici referans tipine göre seçer.
      • super.sesCikar() dinamik bağlanmaz: doğrudan üst sınıfın sürümü çalışır.
      • (Kopek) r aşağı dönüşümü derlenir ama çalışma zamanında denetlenir; nesne bir Kopek değilse ClassCastException fırlatılır. Akraba olmayan tipler arasında (Kedi → Kopek) dönüşüm hiç derlenmez.

      Sınıflar

      Her referans tipi, nesne tipi ve çağrı birleşimi (180 durum) javac --release 8 ile derlenip Java 8 üzerinde çalıştırılarak doğrulanmıştır; derleyici iletileri ve çıktılar gerçek sonuçlardır.

      İlgili sunumlar: Bölüm 4 · Çok Biçimlilik (Referans Tipi ve Nesne Tipi, Dinamik Bağlama, Metot Arama: Aşağıdan Yukarı, Neler Dinamik Bağlanmaz?, Aşırı Yükleme Derleme Zamanında) ve Bölüm 4 · Kalıtım (super Anahtar Kelimesi, Metodu Geçersiz Kılma).