বৈশিষ্ট্য বি প্রসারিত, তাহলে 'এ মিশ আপনি দেয় অবিকল বি প্লাস যাই হোক না কেন একটি যোগ অথবা প্রসারিত করে। বিপরীতে, যদি বৈশিষ্ট্য A এর স্ব-রেফারেন্স থাকে যা স্পষ্টভাবে বি হিসাবে টাইপ করা থাকে, তবে চূড়ান্ত পিতাম শ্রেণীর বিতে বা বংশধর প্রকারের মধ্যেও মিশ্রিত হওয়া আবশ্যক (এবং এটি প্রথমে মেশান , যা গুরুত্বপূর্ণ)।
এটি সবচেয়ে গুরুত্বপূর্ণ পার্থক্য। প্রথম ক্ষেত্রে, নির্দিষ্ট ধরণের বি বিন্দু এ স্ফটিকযুক্ত হয় এটি প্রসারিত করে। দ্বিতীয়টিতে, প্যারেন্ট ক্লাসের ডিজাইনার সিদ্ধান্ত নিতে পারেন যে বি-এর কোন সংস্করণ ব্যবহৃত হবে, সেই পয়েন্টে যেখানে প্যারেন্ট ক্লাসটি তৈরি করা হয়েছে।
আরেকটি পার্থক্য হ'ল যেখানে A এবং B একই নামের পদ্ধতি সরবরাহ করে। যেখানে A বি প্রসারিত করে, A এর পদ্ধতিটি বি এর ওভাররাইড করে। যেখানে বি এর পরে এ মিশ্রিত হয়, এ এর পদ্ধতিটি কেবল জয়ী হয়।
টাইপযুক্ত স্ব-রেফারেন্স আপনাকে আরও অনেক স্বাধীনতা দেয়; A এবং B এর মধ্যে মিলন আলগা।
হালনাগাদ:
যেহেতু আপনি এই পার্থক্যগুলির সুবিধা সম্পর্কে পরিষ্কার নন ...
আপনি যদি সরাসরি উত্তরাধিকার ব্যবহার করেন তবে আপনি বৈশিষ্ট্য A তৈরি করেন যা বি + এ। আপনি পাথর স্থাপন করেছেন।
আপনি যদি টাইপযুক্ত স্ব-রেফারেন্স ব্যবহার করেন, তবে যে কেউ আপনার C বৈশিষ্ট্য C এ ক্লাসে ব্যবহার করতে চায় সে পারে
- বি এবং তারপরে এটিকে সি তে মিশ্রিত করুন
- বি এর একটি উপপ্রকার এবং তারপরে এটিকে সি তে মিশ্রিত করুন
- সি তে মিশ্রিত করুন, যেখানে সি বি এর একটি সাবক্লাস is
এবং এটি তাদের বিকল্পগুলির সীমা নয়, স্কালাকে আপনি কোনও কোড ব্লকের সাথে এটির নির্মাতা হিসাবে সরাসরি কোনও বৈশিষ্ট ইনস্ট্যান্ট করার অনুমতি দেয় given
এ এর পদ্ধতি জয়ের মধ্যে পার্থক্য হিসাবে , কারণ এটিকে শেষের দিকে বি মিশ্রিত করা হয়, এ বির্ধক বিয়ের সাথে তুলনা করে, এটি বিবেচনা করুন ...
আপনি যেখানে বৈশিষ্ট্যের ক্রমটিতে মিশ্রিত হন, যখনই পদ্ধতিটি foo()
আহ্বান করা হয়, সংকলকটি অনুসন্ধানের জন্য মিশ্রিত সর্বশেষ বৈশিষ্ট্যে চলে যায় foo()
, তারপরে (যদি না পাওয়া যায়), এটি এমন একটি বৈশিষ্ট্য না খুঁজে পাওয়া যায় যা প্রয়োগ করে foo()
এবং ব্যবহার করে যে। super.foo()
একটিতে কল করার বিকল্পও রয়েছে , যা প্রয়োগটি না পাওয়া পর্যন্ত এটি বামের ক্রমকেও ঘুরিয়ে দেয়, ইত্যাদি।
সুতরাং A এর বিতে টাইপ করা স্ব-রেফারেন্স থাকলে এবং এ-র লেখক জানেন যে বি প্রয়োগ করে foo()
, এ super.foo()
জেনে কল করতে পারে যে অন্য কিছু সরবরাহ না করলে foo()
, বি করবে। তবে সি শ্রেণীর স্রষ্টার কাছে অন্য কোনও বৈশিষ্ট্য বাদ দেওয়ার বিকল্প রয়েছে যা প্রয়োগ করে foo()
এবং এ পরিবর্তে এ তা পাবে।
আবার এটি A কে বি বাড়ানো এবং সরাসরি বি এর সংস্করণটির কল করার চেয়ে অনেক বেশি শক্তিশালী এবং কম সীমাবদ্ধ foo()
।