निम्नलिखित कोड को देखते हुए:क्यों पहले से लागू अमूर्त प्रकार ओवरराइड करना संभव नहीं है?
class A {
class B
type C <: B
trait D
}
class E extends A {
type C = B
}
class F extends E {
override type C = B with D
}
क्यों ग्रहण इंडिगो आईडीई के भीतर स्काला आईडीई की प्रस्तुति संकलक त्रुटि संदेश वर्ग ई, जो F.this.B के बराबर होती है में अधिभावी प्रकार सी के साथ शिकायत करता है; प्रकार सी में असंगत प्रकार है?
सभी वर्ग "बी" के बाद विशेषता "डी" के साथ केवल "संशोधित" है और इस प्रकार दो प्रकार की परिभाषाएं समान आधार प्रकार हैं, जो "बी" है। इसलिए संगत प्रकार परिभाषाएं।
से नीचे का कोड काम करता है। मैं परिवर्तनीय असाइनमेंट के समान प्रकार के असाइनमेंट के नियमों पर विचार करता हूं, जैसे:
class Foo
trait Bar
val a: Foo = new Foo
val fooWithBar: Foo = new Foo with Bar
क्या मेरी समझ गलत है?
बार के साथ फू फू का एक उप प्रकार है। यह समस्या नहीं है। किसी प्रकार के सदस्य को फिर से परिभाषित करने की अनुमति नहीं है, जबकि इसे ठीक किया गया है, यहां तक कि एक उप प्रकार के लिए भी। यदि आपके पास कक्षा बार फू फैलाता है, तो आप फू टू बार से किसी प्रकार के सदस्य को फिर से परिभाषित नहीं कर सके। –