2012-03-18 13 views
8

यह कैसे आता है कि मैं एक अमूर्त वर्ग को तुरंत चालू करता हूं?स्कैला: अमूर्त कक्षाएं तत्काल?

abstract class A { 
    val a: Int 
    } 

    val a = new A {val a = 3} 

या कुछ ठोस वर्ग अंतर्निहित रूप से बनाए गए हैं? और new A के बाद उन ब्रेसिज़ का क्या अर्थ है?

उत्तर

18

में अनाम क्लास इंस्टॉलेशन के बारे में हिस्सा देखें, इसके साथ आप स्पष्ट रूप से A का विस्तार करते हैं। क्या तुमने किया था इस के लिए वाक्यात्मक चीनी, बराबर है:

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

ये कोष्ठक केवल आप तुरंत एक वर्ग का विस्तार, एक नया, अनाम वर्ग है, जो मूल्य a को दर्शाता है और इसलिए किसी भी अधिक सार नहीं है बनाने दो।

5

आप जावा पता है, इस के समान है:

new SomeAbstractClass() { 
    // possible necessary implementation 
} 

कारण Scalas uniform access को ऐसा लगता है कि आप किसी भी सार कार्यों कार्यान्वित नहीं कर रहे, लेकिन सिर्फ a एक मूल्य देकर, आप वास्तव में "concretesize करना " कक्षा।

दूसरे शब्दों में, आप A के कंक्रीट उप-वर्ग का उदाहरण बना रहे हैं, जिसमें सबक्लास को नाम (बिना शब्द "अज्ञात" वर्ग) दिए गए हैं।

3

स्कैला आपको न केवल अज्ञात कार्यों को बनाने की अनुमति देता है लेकिन अनाम वर्ग भी।

आप क्या किया

class Anon extends A { 
    val a = 3 
} 

लेकिन Anon नाम

3

आप एक अनाम वर्ग कि एक से विरासत और उसके सार एक सदस्य overloads instantiating रहे बिना simular है। संदर्भ के लिए, A Tour of Scala: Abstract Types

संबंधित मुद्दे