'da ne gönderiyor ne tam olarak ne gönderdiği konusunda kafam karıştı. Özellikle çift gönderim söz konusu olduğunda. Bu konsepti kavramanın basit bir yolu var mı?java
java
cevap
Bir dil, işlev/yöntem tanımlarına yapılan çağrıları gönderme biçimidir.
Java'da, bir sınıf aynı ada sahip ancak farklı parametre türlerine sahip birden çok yönteme sahip olabilir ve dil, yöntem çağrılarının, gerçek parametrelerin en spesifik türlerine sahip doğru parametrelerle yönteme gönderildiğini belirtir. eşleşebilir. Bu statik sevk. Örneğin
,void foo(String s) { ... }
void foo(Object o) { ... }
{ foo(""); } // statically dispatched to foo(String)
{ foo(new Object()); } // statically dispatched to foo(Object)
{ foo((Object) ""); } // statically dispatched to foo(Object)
Java da sanal yöntem sevkini sahiptir. Bir alt sınıf, bir üst sınıfta bildirilen bir yöntemi geçersiz kılabilir. Bu nedenle, çalışma zamanında JVM, yöntem çağrısını, this
çalışma zamanı türüne uygun yöntemin sürümüne göndermelidir. Örneğin
,
class Base { void foo() { ... } }
class Derived extends Base { @Override void foo() { ... } }
{ new Derived().foo(); } // Dynamically dispatched to Derived.foo.
{
Base x = new Base();
x.foo(); // Dynamically dispatched to Base.foo.
x = new Derived(); // x's static type is still Base.
x.foo(); // Dynamically dispatched to Derived.foo.
}
çift gönderme neşriyatına (aynı zamanda dinamik adlandırılır) statik ve çalışma zamanı birleşimidir.
Teşekkürler! Bu çok yardımcı oldu. – thunderousNinja
Bu gerçekten güzel bir yanıttır. Java'nın çift gönderim dili olmadığını biliyorum, ancak şu anki örnekleriniz bağlamında nasıl çift sevginin WULD gibi göründüğüne dair bir örnek ekleyebilecek misiniz? Sanırım x.foo ("") 'gibi bir şey olurdu ama bunu görmenin çok faydalı olacağını düşünüyorum. – Ogen
@Ogen, bu Java'daki çift gönderim hakkında. JavaScript'i kastedebilir misiniz? –
haha yea ... ben anladım eğer anladım, ben ziyaretçi desen daha iyi bir anlayış alacağını düşündüm – thunderousNinja
Ah evet. Üzgünüz, etiketi kaldıracağım. Bu tasarım desenleri ile ilgisi yok :) – BalusC
Sadece "gönderme" terimi biraz aşırı yüklü olduğunu not etmek için. Ayrıca zamanlanmış görevlerin bir işlemci üzerine işlenmesi anlamına da gelebilir. Bazı gerçek zamanlı zamanlayıcılarda, bir zamanlayıcı ve bir dağıtıcı kavramı, farklı fikirler ve yazılım bileşenleridir. – andersoj