यह प्रश्न पुराना है, लेकिन मुझे लगता है कि एक स्पष्ट स्पष्टीकरण Liskov प्रतिस्थापन सिद्धांत का आह्वान करना है: सुपरक्लास के बारे में जो कुछ भी सच है, उसके सभी उप-वर्गों के बारे में सच होना चाहिए। आपको एक सबफू सब कुछ करने में सक्षम होना चाहिए जो आप फू के साथ कर सकते हैं, और शायद अधिक।
मान लीजिए कि हमारे पास कैलिको < है: बिल्ली <: पशु, और हुस्की <: कुत्ता <: पशु। आइए Function[Cat, Dog]
देखें। इसके बारे में क्या बयान सही हैं? वहाँ दो हैं:
(1) आप किसी भी कैट (बिल्ली की इसलिए किसी भी उपवर्ग) में पारित कर सकते हैं
(2) आप दिए गए मान पर कोई कुत्ता विधि कॉल कर सकते हैं
तो Function[Calico, Dog] <: Function[Cat, Dog]
मेकअप भावना करता है ? नहीं, सुपरक्लास के सत्य जो बयान उपclass, अर्थात् कथन (1) के बारे में सच नहीं हैं। आप किसी भी बिल्ली में एक समारोह में गुजर नहीं सकते हैं जो केवल कैलिको बिल्लियों को लेता है।
लेकिन Function[Animal, Dog] <: Function[Cat, Dog]
समझ में आता है? हां, सुपरक्लास के बारे में सभी बयान सबक्लास के बारे में सच हैं। मैं अभी भी किसी भी बिल्ली में गुजर सकता हूं - असल में मैं उससे भी ज्यादा कर सकता हूं, मैं किसी भी पशु में गुजर सकता हूं - और मैं लौटे हुए मूल्य पर सभी कुत्ते के तरीकों को बुला सकता हूं।
तो A <: B
Function[B, _] <: Function[A, _]
अब तात्पर्य Function[Cat, Husky] <: Function[Cat, Dog]
कोई मतलब है? हां, सुपरक्लास के बारे में सभी बयान उपclass के सच हैं; मैं अभी भी एक बिल्ली में गुजर सकता हूं, और मैं अभी भी लौटे मूल्य पर सभी कुत्ते के तरीकों को कॉल कर सकता हूं - असल में मैं उससे भी अधिक कर सकता हूं, मैं लौटे हुए मूल्य पर सभी हुस्की विधियों को कॉल कर सकता हूं।
लेकिन Function[Cat, Animal] <: Function[Cat, Dog]
समझ में आता है? नहीं, सुपरक्लास के सत्य जो बयान उपclass, अर्थात् कथन (2) के बारे में सच नहीं हैं। मैं कुत्ते पर उपलब्ध सभी विधियों को वापस लौटाया नहीं जा सकता, केवल पशु पर उपलब्ध हैं।
तो Function[Animal, Husky]
के साथ मैं Function[Cat, Dog]
के साथ जो कुछ भी कर सकता हूं वह कर सकता हूं: मैं किसी भी बिल्ली में जा सकता हूं, और मैं लौटे हुए मूल्य पर सभी कुत्ते विधियों को कॉल कर सकता हूं। और मैं और भी कर सकता हूं: मैं अन्य जानवरों में जा सकता हूं, और मैं कुत्ते पर उपलब्ध विधियों को बुला सकता हूं जो कुत्ते पर उपलब्ध नहीं हैं। तो यह समझ में आता है: Function[Animal, Husky] <: Function[Cat, Dog]
। पहले प्रकार पैरामीटर को सुपरक्लास के साथ प्रतिस्थापित किया जा सकता है, दूसरा सबक्लास के साथ।
धन्यवाद, यह बहुत स्पष्ट था। (पुनः) परिभाषित करने का प्रयास: 'सह/अनुबंध-भिन्नता गुणों के बीच उप प्रकार के संबंध को निर्देशित करने वाली गुण हैं, जो उनके घटक प्रकारों के बीच समान संबंध की प्रकृति के अधीन हैं।' सार, मुझे पता है, लेकिन मैं उदाहरणों से रहित परिभाषा को पसंद करता हूं (हालांकि आपका बहुत उपयोगी था)। – bjt38
एए के लिए धन्यवाद, क्या आप समझ सकते हैं कि फंक्शन 1 में + बी क्यों है [-A, + B] – liango
@liango - उदाहरण के द्वारा एक्सप्लोरेशन: यदि आप 'स्ट्रिंग' वापस करते हैं तो आप निश्चित रूप से 'ऑब्जेक्ट' वापस कर देते हैं, इसलिए '। .. => स्ट्रिंग' '= = ऑब्जेक्ट' का उप-वर्ग होना चाहिए। यही है 'बी' संकेत करता है। –