2012-03-18 24 views
8

Soyut bir sınıf oluşturmam nasıl oluyor?scala: soyut sınıfları somutlaştırma?

abstract class A { 
    val a: Int 
    } 

    val a = new A {val a = 3} 

Ya da bazı somut sınıflar örtülü olarak oluşturulmuş mu? Ve new A'dan sonraki parantezler ne anlama geliyor? Java biliyorsanız

cevap

18

'daki anonim sınıf örnekleriyle ilgili kısma bakın, dolaylı olarak A'u uzatın. Yaptığın bu eşdeğer sözdizimsel şeker vardır:

class A' extends A { 
    val a = 3 
} 
val a = new A' 

Bu parantez sadece sen değerini a başlatır ve bir daha bu nedenle soyut olmayan yeni, anonim sınıf yaratarak anında bir sınıf kapsamını genişletelim.

5

, bu benzer: Eğer herhangi bir soyut işlevleri uygulamak değil gibi scalas uniform access için görünüyor

new SomeAbstractClass() { 
    // possible necessary implementation 
} 

nedeniyle

, ama sadece bir değer a vererek, aslında "concretesize yapmak " sınıf. Başka bir deyişle

, bir adın (böylece dönem "anonim" sınıfı) alt sınıf vermeden A bir beton alt sınıfının bir örneğini yaratmış olursunuz.

3

Scala, yalnızca anonim işlevler değil, anonim sınıflar oluşturmanıza da olanak tanır. Ne yaptın

class Anon extends A { 
    val a = 3 
} 

ama Anon isim

3

Eğer A'dan devralır ve soyut bir üyeyi overloads anonim sınıfını başlatmasını ediyoruz olmadan simular olduğunu. Başvuru için, A Tour of Scala: Abstract Types

İlgili konular