Teorik olarak parametreler gibi, üst sınıfta parametrelerin supertypes olan bir yöntem ile bir alt sınıfta bir ebeveyn yöntemlerini geçersiz kılmak için ses: programlama dilleri bu nasıl "özelliğini" ve destekleyenYöntem parametrelerinin kontravaryant olduğu, statik olarak yazılmış programlama dilleri miras ile mi var?
class T
def foo(s: String) = ...
class S
override def foo(a: Any) = ...
onlar bir alt sınıfın tek yöntem bir üst sınıfın birden yöntemlerini geçersiz kılabilir ihtimaline gibi sorunları çözmek mi: (. Any
ait String
olduğunu ve Int
alt tipi varsayarsak)
class T
def foo(s: String) = ...
def foo(i: Int) = ...
class S
override def foo(a: Any) = ...
Bildiğimden, statik olarak yazılan dillerden bahsediyorsanız. Dinamik olarak yazılan diller bu konuda değil, statik olarak yazılan diller hakkında konuştuğunuzu varsayar. Lütfen sorunuzda dikkat edin. –
WIkipedia, "Sather" adında bir dilin contravariance (http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Sather, http://en.wikipedia.org/wiki/Sather) olduğunu iddia eder ancak doğruluğu için kefil olamaz. –
Ben böyle bir dil bilmiyorum ama bir yöntem süper sınıftan birden çok yöntemi geçersiz kılabilir aslında bir sorun görmüyorum. sInstance.foo (anyObject) 'yi kullandığınızda bu yöntem denir. T.foo (String) 've' T.foo (Int) 'değil. Derleyici için sorun yok. sadece siz, bir programcı olarak, sınıflarınızı tasarlamanız gerekiyor bu yüzden bu çağrışım mantıklı geliyor – piotrek