SORU
6 EYLÜL 2015, Pazar


Neden derleme zamanında bind değişkenleri Java mı?

Aşağıdaki kod örneği göz önünde bulundurun

class MyClass {
    public String var = "base";

    public void printVar() {
        System.out.println(var);
    }
}

class MyDerivedClass extends MyClass {
    public String var = "derived";

    public void printVar() {
        System.out.println(var);
    }
}

public class Binding {
    public static void main(String[] args) {
        MyClass base = new MyClass();
        MyClass derived = new MyDerivedClass();

        System.out.println(base.var);
        System.out.println(derived.var);
        base.printVar();
        derived.printVar();
    }
}

aşağıdaki çıktıyı verir

base
base
base
derived

Yöntem çağrıları çalışma anında çözümlenir ve doğru geçersiz kılınmış yöntemi beklendiği gibi denir.
Değişkenleri erişim, daha sonra öğrendim derleme zamanında yerine çözümlenir. Bir çıkış bekliyordum

base
derived
base
derived

türetilmiş bir sınıf çünkü var yeniden tanımı, temel sınıf bir gölge.
Neden değişken bağlama çalışma zamanında derleme zamanında değil, olur mu? Sadece performansı artırmak için mi?

CEVAP
6 EYLÜL 2015, Pazar


Nedeni Section 15.11, aşağıda alıntı bir örnek Java Dil özellikleri açıklanmıştır

...

Son satırı gösteren, gerçekten, alan erişilen bağlı değil çalışma zamanı sınıf başvurulan nesne; bile s tutar başvurusu bir nesnenin sınıf T ifade s.x ifade eder x alan sınıf S, çünkü bu tür ifadesi s S. Sınıf T nesnelerin iki alan kendi üst sınıf S x, sınıf için bir T adlı içerir.

Alan erişir için dinamik arama bu eksikliği programlarını etkin biçimde basit uygulamaları çalıştırmak için izin verir. Geç bağlama ve geçersiz kılma gücüne örnek yöntemleri kullanıldığında kullanılabilir, ama sadece...

Evet performans için bir sebep. Access, ifade değerlendirilir nasıl belirtimi aşağıdaki gibi belirtilmiştir

  • Alanı static:

    ...

    • Eğer bu alanı boş olmayan bir final, sonra sonucu yazın adlı üye alan T değeri nesne değeri tarafından başvurulan bulunduİlköğretim.

neredeİlköğretimsenin durumunda başvurduğu değişken 21* *Türü derived.

Başka bir nedeni @önerdi Clashsoft, sınıfları, alanları geçersiz değil, olmasıdırgizli. Sense access ilan Türüne göre ya da kalıbını kullanarak cevap vermek anlamına geliyor. Bu da statik yöntemleri için de geçerlidir. Bu alana ilan Türüne göre belirlenir. Gerçek türüne bağlıdır nerede örneğiyle yöntemleri geçersiz kılma aksine. İDEA yukarıdaki alıntı, aslında örtülü olarak bu sebepten bahseder:

Geç bağlama ve geçersiz kılma gücüne örnek yöntemleri kullanıldığında kullanılabilir, ama sadece.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Apple

    Apple

    22 HAZİRAN 2005
  • Day9TV

    Day9TV

    22 NİSAN 2010
  • StalkerJS

    StalkerJS

    15 HAZİRAN 2010