मेरे लिए, आपका उदाहरण स्विफ्ट 3.0.1 में काम नहीं करता है।
मैंने इस कोड को खेल के मैदान में दर्ज किया:
class Jedi {
let lightsaberColor = "Blue"
}
class Sith: Jedi {
override var lightsaberColor : String {
return "Red"
}
}
Xcode में संकलन समय पर त्रुटि फेंकता है:
एक 'var' के गेट के साथ अपरिवर्तनीय 'लेट' प्रॉपर्टी 'LightsaberColor' को ओवरराइड नहीं कर सकते
नहीं, आप संग्रहीत संपत्ति के प्रकार को बदल नहीं सकते हैं। Liskov प्रतिस्थापन सिद्धांत आपको यह अनुमति देने के लिए मजबूर करता है कि एक उपवर्ग का उपयोग उस स्थान पर किया जाता है जहां सुपरक्लास चाहता है।
लेकिन अगर आप इसे बदल देते हैं var
और इसलिए set
गणना की गई संपत्ति में जोड़ते हैं, तो आप उसी प्रकार की गणना की गई संपत्ति के साथ संग्रहीत संपत्ति को ओवरराइड कर सकते हैं।
class Jedi {
var lightsaberColor = "Blue"
}
class Sith: Jedi {
override var lightsaberColor : String {
get {
return "Red"
}
set {
// nothing, because only red is allowed
}
}
}
यह संभव है क्योंकि यह संग्रहीत संपत्ति से गणना की गई संपत्ति पर स्विच करने का अर्थ बना सकता है।
लेकिन संग्रहीत var
संपत्ति के साथ एक संग्रहीत var
संपत्ति को ओवरराइड करने का कोई मतलब नहीं है, क्योंकि आप केवल संपत्ति के मूल्य को बदल सकते हैं।
हालाँकि, आप किसी संग्रहीत संपत्ति के साथ संग्रहीत संपत्ति को ओवरराइड नहीं कर सकते।
मैं यह नहीं कहूंगा कि सीथ जेडी हैं :- पी। इसलिए यह स्पष्ट है कि यह काम नहीं कर सकता है।