2012-10-12 16 views
50

Scala'daki özelliklerin, Java'daki arabirimlere benzer olduğunu görüyorum (ancak Java'daki arabirimler, diğer arabirimleri genişletiyor, bir sınıfı genişletmiyorlar). Bir özelliğin bir sınıfı genişletdiği an example on SO about traits usage'u gördüm.Scala özelliği neden bir dersi genişletebilir?

Bunun amacı nedir? Özellikler neden sınıfları genişletebilir? yani mix-in tüm classestraitclass olduğunu uzatmak gerektiğini -

+1

Bağlantı kurduğunuz yanıtı okursanız, uygulamaların içerebildiğinden, özelliklerin arayüzlere çok benzemediğini görürsünüz. –

+2

Ayrıca, kalıtsal miras ve kendi kendine yazım notları arasındaki farkla da ilgilenebilirsiniz: http://stackoverflow.com/questions/1990948/what-is-the-difference-between-scala-self-types-and-trait- alt sınıflar –

+0

Evet, arabirimlerden farklı olarak, yöntemlerin kısmi yöntemlerin uygulanmasını içerebileceği noktasını anladım, ancak sınıfları genişleten özelliklerin amacından (örnekte açıklandığı gibi) emin değilim. – Raj

cevap

65

ellerinden Evet, bir class uzanan traitclassestrait olduğunu uzatabilirsiniz ne bir kısıtlama koyar.

scala> class Foo 
defined class Foo 

scala> trait FooTrait extends Foo 
defined trait FooTrait 

scala> val good = new Foo with FooTrait 
good: Foo with FooTrait = [email protected] 

scala> class Bar 
defined class Bar 

scala> val bad = new Bar with FooTrait 
<console>:10: error: illegal inheritance; superclass Bar 
is not a subclass of the superclass Foo 
of the mixin trait FooTrait 
     val bad = new Bar with FooTrait 
          ^
+13

İlginç. Ancak, kendinin türüne bir tür kısıtlaması koyarak, bir özelliğin karışabileceği sınıfları da kısıtlayabilirsiniz, örn. özellik FooTrait {self: Foo =>} '. Ne zaman diğerine karşı bir teknik kullanırsın? – AmigoNico

+0

Scala, tüm yazım işleriyle çok çılgınlaşıyor. Bunun oldukça faydalı olabileceğini kesinlikle görebiliyorum ama herkes somut örnekler verebilir mi? –

+1

@AmigoNico [burada] (http://stackoverflow.com/q/36945333/2032064) bir sınıftan miras almayı tercih edebileceğiniz bir örnektir. – Mifeet

İlgili konular