में वैल चर को ओवरराइड करना चाहिए, मुझे स्कैला में एक अजीब समस्या मिलती है। मेरा कोड निम्नलिखित है, कक्षा कर्मचारी वर्ग व्यक्तिस्कैला
लेकिन कोड का यह टुकड़ा संकलित नहीं किया जा सकता है, मैंने स्पष्ट रूप से पहले नाम और अंतिम नाम वैल चर के रूप में परिभाषित किया है। ऐसा क्यों है ? क्या इसका मतलब है कि मुझे बेस क्लास में वैल वैरिएबल ओवरराइड करना है? और उद्देश्य क्या है?
class Person(firstName: String, lastName: String) {
}
class Employee(override val firstName: String, override val lastName: String, val depart: String)
extends Person(firstName,lastName){
}
इस उत्तर एक प्रश्न के साथ सवाल का जवाब। जो मैं जवाब देने की कोशिश करूंगा। 'अजीब' वर्ग में 'वैल' के सामने 'ओवरराइड' कहना है कि संकलक को यह बताना है कि आप एक नया क्षेत्र पेश करने का इरादा नहीं कर रहे हैं। 'ओवरराइड' का अर्थ मोटे तौर पर है "यहां मैं कुछ ऐसा घोषित कर रहा हूं जो पहले से ही अभिभावक वर्ग में घोषित किया गया है और विरासत में कुछ ऐसा पेश करने का इरादा नहीं है"। "ओवरराइड" 'वैल' के बिना" कृपया एक सार्वजनिक, रीडोनली फ़ील्ड बनाएं "। हालांकि स्कैला दो वैल फ़ील्ड को समान नाम रखने की अनुमति नहीं देता है। इस प्रकार 'ओवरराइड' अनिवार्य है। –
@TheodoreNorvell - मेरा बिंदु यह माना जाता था कि अगर आप मूल कक्षा को उसी फ़ील्ड के साथ विस्तारित करने जा रहे हैं तो ओवरराइड बनाने के लिए _no reason_ है। बस उन्हें पैरामीटर के रूप में पास करें और superclass vals vals होने दें। –
@RexKerr ठीक है, यह एक अच्छा मुद्दा है। आप पूछ रहे थे, "'ओवरराइड वैल' क्यों है?"; मैं जवाब दे रहा था, "क्यों 'ओवरराइड' दिया गया है कि आपके पास' वैल' है? "। जिस कोड में मैं लिख रहा हूं, मेरे पास एक समान स्थिति थी, लेकिन, मेरे मामले में, सबक्लास एक केस क्लास है और इसलिए कन्स्ट्रक्टर पैरामीटर स्वचालित रूप से एक वैल्यू है। इस मामले में, कंपाइलर एक त्रुटि संदेश देता है जब तक 'ओवरराइड' कीवर्ड वहां न हो और संभवतः सिंटैक्टिक कारणों के लिए, इसे 'वैल' कीवर्ड' की भी आवश्यकता होती है। केवल दो डाउनसाइड्स इन दो अतिरिक्त शब्द हैं और यह फ़ील्ड दो बार शुरू किया गया है। –