উত্তরাধিকার এবং পলিমারফিজমের মধ্যে প্রধান পার্থক্য কী?


172

আমি আজ মডিউল ওপেন বইয়ের পরীক্ষা শেষে এই প্রশ্নের সাথে হাজির হয়েছি এবং নিজেকে হারিয়ে দেখলাম। আমি পড়ছিলাম Head first Javaএবং উভয় সংজ্ঞা ঠিক একই বলে মনে হয়েছিল be আমি কেবল ভাবছিলাম যে আমার নিজের মনের অংশের জন্য প্রধান পার্থক্য কী। আমি জানি এর সাথে অনেকগুলি অনুরূপ প্রশ্ন রয়েছে তবে, আমি কোনটিই দেখিনি যা একটি নির্দিষ্ট উত্তর দেয়।


2
কোনওভাবে এই প্রশ্নের সাথে সম্পর্কিত: উত্তরাধিকার ছাড়াই কি
বহুপদী

উত্তর:


289

উত্তরাধিকার হ'ল যখন কোনও 'শ্রেণি' বিদ্যমান 'শ্রেণি' থেকে আসে। সুতরাং আপনার যদি একটি Personক্লাস থাকে, তবে আপনার কাছে এমন একটি Studentবর্গ রয়েছে যা প্রসারিত Person, সমস্ত কিছু Student উত্তরাধিকার সূত্রে প্রাপ্তPerson । আপনি ব্যক্তির ক্ষেত্রগুলি / পদ্ধতিগুলিতে যে অ্যাক্সেস মডিফায়ারগুলি রেখেছেন তার চারপাশে কিছু বিশদ রয়েছে তবে এটি প্রাথমিক ধারণা। উদাহরণস্বরূপ, যদি আপনি একটি ব্যক্তিগত ক্ষেত্র আছে যদি Person, Studentএটা দেখতে পাবে না কারণ এটির ব্যক্তিগত, ও বেসরকারি ক্ষেত্রের উপশ্রেণী কাছে দৃশ্যমান নয়।

পলিমারফিজম কী ধরণের জিনিস রয়েছে তার উপর নির্ভর করে প্রোগ্রামটি কী পদ্ধতি ব্যবহার করবে তা কীভাবে সিদ্ধান্ত নেয় তা নিয়ে কাজ করে with আপনি যদি একটি থেকে থাকে Personযা আছে, readপদ্ধতি, এবং আপনি একটি আছে Studentযা প্রসারিত Person, যার মধ্যে নিজস্ব বাস্তবায়ন হয়েছে read, যা পদ্ধতি বলা পরার রানটাইম দ্বারা আপনার জন্য নির্ধারিত হয়, নির্ভর করে আপনি একটি আছে Personবা Student। এটি কিছুটা জটিল হয়ে ওঠে তবে আপনি যদি এরকম কিছু করেন

Person p = new Student();
p.read();

শিক্ষার্থীদের পড়ার পদ্ধতিটি কল হয় । পলিমারফিজমকে কর্মে চালিত করে। কারণ একটি আপনি যে নিয়োগ করতে পারি না Student একটি হল Person , কিন্তু রানটাইম স্মার্ট যথেষ্ট জানাতে চাই যে, প্রকৃত ধরনের pহয় স্টুডেন্ট

নোট করুন যে বিবরণগুলি ভাষার মধ্যে পৃথক রয়েছে। উদাহরণস্বরূপ আপনি জাভাস্ক্রিপ্টে উত্তরাধিকার করতে পারেন, তবে এটি জাভাতে যেভাবে কাজ করে তার চেয়ে সম্পূর্ণ আলাদা different


9
@ এইচভিজিটিকোডস সংক্ষেপে, সুপারক্লাস-সাবক্লাস সম্পর্ক হ'ল উত্তরাধিকার এবং প্যারেন্ট ক্লাস এবং এর উপ-শ্রেণীর মধ্যে ভিন্ন পদ্ধতিতে একই পদ্ধতি বাস্তবায়নের ধারণা, এবং তাদেরকে পরিস্থিতির ভিত্তিতে ডাকে পলিমারফিজম বলে ,. আমি কি সঠিক?
মুহাম্মদ রায়হান মুহাইমিন

1
@ hvgotcodes তবে বলুন যে Personএর readপদ্ধতি যদি সর্বজনীন অ্যাক্সেস সংশোধক ব্যবহার করে তবে অবজেক্টগুলি সেগুলিতে অ্যাক্সেস Studentকরতে পারবে না ? এবং তারপর Student s = new Student();এটি সহজ হবে না? আমি এখনও পলিম্পারফিজমের সুবিধাগুলি আসলে পাই না।
Scorpiorian83

1
@hvgotcodes শিক্ষার্থী s = নতুন শিক্ষার্থী () কাজ করবে। তবে এই ধারণাটি ব্যবহার করে আপনি প্রচুর কোড লিখেছেন এবং পরে আপনি বুঝতে পেরেছেন যে আপনি কোনও ভুল করেছেন। ব্যক্তিটি আসলে ছাত্র নয়, এটি শিক্ষক। সুতরাং আপনি কেবল ব্যক্তি পি = নতুন শিক্ষার্থী () থেকে ব্যক্তি পি = নতুন শিক্ষক () এ পরিবর্তিত হতে পারেন, তবে এটি আপনার জীবনকে এত সহজ করে তুলবে।
মুনমুনব্ব

আমার প্রশ্নটি এখানে কেন আপনি Person p = new Student();পরিবর্তে ব্যবহার করতে চান Student p = new Student();?
পারফেক্টকন্ট্রাস্ট

@ পারফেক্ট কনট্রাস্ট আমি মনে করি আপনি যখন ছাত্র, ড্রাইভার, শিক্ষক ইত্যাদি ব্যক্তি হিসাবে থাকতে চান এবং আপনি এগুলিকে একটি তালিকা বা কোনও কিছুর অধীনে গ্রুপ করেন তখন এটি কার্যকর হয়। সুতরাং যখন আপনি সবার জন্য 'পঠন' কল করেন, প্রত্যেকে তাদের নিজস্ব 'পড়ুন' পদ্ধতি কল করে।
সাভান্তে

205

উত্তরাধিকার বলতে একটি সাবক্লাসে একটি সুপার ক্লাসের গঠন এবং আচরণ ব্যবহার বোঝায় ।

পলিমারফিজম বলতে সাবক্লাসে একটি সুপার ক্লাসের আচরণ পরিবর্তন বোঝায় ।


5
এই উত্তরটি কি বোঝায় যে বহুত্ববাদের উত্তরাধিকার প্রয়োজন?
jaco0646

6
@ jaco0646 - জাভা প্রসঙ্গে, আমিও তাই মনে করি। (অন্যান্য ভাষায়, সম্ভবত এতটা নয়)) নোট করুন যে এখানে "সুপার ক্লাস" এবং "সাবক্লাস" আলগাভাবে ব্যবহৃত হয়। পলিমারফিজম বলতে কোনও ইন্টারফেসে নির্দিষ্ট করা আচরণের উত্তরাধিকার (তবে প্রয়োগ করা হয়নি) এর অর্থও হতে পারে।
টেড হপ

1
@ আলিরেজাআরহমানি - আপনার মন্তব্য আমি বুঝতে পারছি না। আপনার অর্থ কি উত্তরাধিকার সম্পত্তি এবং আচরণ উভয়ই উত্তরাধিকার সূত্রে জড়িত না? এটি জাভা (এবং সর্বাধিক শ্রেণিভিত্তিক, বস্তু-ভিত্তিক ভাষা) উত্তরাধিকারকে কীভাবে সংজ্ঞায়িত করবে তার বিপরীতে হবে be থেকে জাভা ল্যাঙ্গুএজ স্পেসিফিকেশন, §8.4.8 : "একজন ক্লাস সি উত্তরাধিকারী তার সরাসরি সুপারক্লাস থেকে সব কংক্রিট পদ্ধতি m(উভয় staticএবং instance), যার জন্য সুপারক্লাস ... এর" (উত্তরাধিকার বিস্তারিত থাকে)। আমার কাছে "কোড পুনরায় ব্যবহার" এর মতো শোনাচ্ছে।
টেড হপ্প

@ টেডহপ্প উত্তরাধিকার হ'ল মূলত একটি বহুমুখী সরঞ্জাম, তবে কিছু লোক, তাদের পরবর্তী বিপদ থেকে অনেক বেশি, কোডটিকে পুনরায় ব্যবহার / ভাগ করে নেওয়ার উপায় হিসাবে ব্যবহার করার চেষ্টা করে। যুক্তি "যদি আমি উত্তরাধিকারসূত্রে উত্তম হয়ে যাই তবে আমি নিখরচায় সমস্ত পদ্ধতি পেয়েছি" যুক্তিযুক্ত, তবে এই দুটি শ্রেণীর সম্ভাব্য কোনও পলিমারফিক সম্পর্ক নেই এই বিষয়টি উপেক্ষা করে।
আলিরেজা রহমানি খলিলী

1
@ আলিরিজা রহমানি - জাভাতে (যা ট্যাগগুলি অনুযায়ী ওপি বিশেষত জিজ্ঞাসা করেছিল), শ্রেণীর উত্তরাধিকারের মধ্যে উত্তরাধিকার সূত্রে প্রাপ্ত উত্তরাধিকারের আচরণ অবশ্যই জড়িত। এটি ভাষার সংজ্ঞার অংশ। আপনার বর্ণনা হিসাবে এটির অপব্যবহার করা যেতে পারে তা জাভার অন্যতম দুর্বলতা। (একটি সম্পর্কিত দুর্বলতা ইন্টারফেসে সংজ্ঞায়িত ধ্রুবকগুলি কেবল আমদানি করার জন্য ইন্টারফেস বাস্তবায়নের ক্লাস ঘোষণার সাথে জড়িত। অবশেষে জাভা ডিজাইনাররা import staticইন্টারফেসের এই অপব্যবহার দূর করার জন্য প্রবর্তন করেছিলেন।) জাভাতে খাঁটি পলিমারফিজমের জন্য, ব্যবহারের সরঞ্জামটি ইন্টারফেস নয় শ্রেণির উত্তরাধিকার হিসাবে।
টেড হপ

63

পলিমারফিজম : বিভিন্ন ধরণের বস্তুর সাথে একইভাবে আচরণ করার ক্ষমতা The উদাহরণ: জিরাফ এবং কুমির উভয়ই প্রাণী এবং প্রাণীও পারে Move। আপনার যদি কোনও উদাহরণ থাকে Animalতবে আপনি Moveকোন ধরণের প্রাণী তা না জেনে বা যত্ন না করে কল করতে পারেন ।

উত্তরাধিকার : এটি একইসাথে পলিমারফিজম এবং কোড পুনরায় ব্যবহার উভয় অর্জনের একটি উপায়।

পলিমারফিজমের অন্যান্য রূপ: পলিমারফিজম অর্জনের অন্যান্য উপায় রয়েছে যেমন ইন্টারফেস, যা কেবল পলিমারফিজম সরবরাহ করে তবে কোনও কোড পুনরায় ব্যবহার করা হয় না (কখনও কখনও কোডটি একেবারেই আলাদা হয়, যেমন Moveএকটি সাপের Moveজন্য কোনও কুকুরের থেকে একেবারেই আলাদা হতে পারে) এই ক্ষেত্রে একটি ইন্টারফেস ভাল পলিমারফিক পছন্দ হবে।

অন্যান্য গতিশীল ভাষায় হাঁসের টাইপিংয়ের মাধ্যমে বহুবর্ষ অর্জন করা যেতে পারে, যা ক্লাসগুলি এমনকি একই বেস শ্রেণি বা ইন্টারফেস ভাগ করার প্রয়োজন হয় না, তাদের কেবল একই নামের একটি পদ্ধতি প্রয়োজন। অথবা জাভাস্ক্রিপ্টের মতো আরও গতিশীল, আপনার এমনকি ক্লাসও লাগবে না, কেবল একই পদ্ধতির নামযুক্ত কোনও বস্তু বহুবর্ষীয়ভাবে ব্যবহার করা যেতে পারে।


17

মূল পার্থক্য হ'ল পলিমারফিজম উত্তরাধিকারের একটি নির্দিষ্ট ফলাফল। পলিমারফিজম যেখানে পদক্ষেপের অনুরোধ করা হবে তা বস্তুর ধরণের ভিত্তিতে রানটাইমে নির্ধারিত হয়। এটি এমন একটি পরিস্থিতিতে আসে যখন আপনি যখন একটি শ্রেণি অন্যের কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হন এবং কোনও নির্দিষ্ট পদ্ধতিকে ওভাররাইড করেন। যাইহোক, একটি সাধারণ উত্তরাধিকারী গাছে, আপনাকে কোনও পদ্ধতি ওভাররাইড করতে হবে না এবং তাই সমস্ত পদ্ধতি কলগুলি বহুবর্ষীয় হতে হবে না। যে জানার জন্য? এটি সমস্ত ফোর্ডের গাড়িগুলির একই ধরণের সমস্যা হ'ল অটোমোবাইল, তবে সমস্ত অটোমোবাইলই ফোর্ড নয় (যদিও বেশ নয় ....)।

অতিরিক্ত হিসাবে, পলিমারফিজম পদ্ধতি আহ্বানের সাথে কাজ করে যেখানে উত্তরাধিকারী ডেটা সদস্যদেরও বর্ণনা করে ইত্যাদি describes


12

জাভাতে, দু'জনের ঘনিষ্ঠ সম্পর্ক রয়েছে। এর কারণ জাভা পদ্ধতিটি আহ্বানের জন্য একটি কৌশল ব্যবহার করে যার নাম "ডায়নামিক প্রেরণ"। যদি আমার থাকে

public class A {
  public void draw() { ... }
  public void spin() { ... }
}

public class B extends A {
  public void draw() { ... }
  public void bad() { ... }
}

...

A testObject = new B();

testObject.draw(); // calls B's draw, polymorphic
testObject.spin(); // calls A's spin, inherited by B
testObject.bad(); // compiler error, you are manipulating this as an A

তারপরে আমরা দেখতে পাই যে বি এর উত্তরাধিকার সূত্রে spinএ। তবে যাইহোক, আমরা যখন বস্তুটিকে এমন একটি প্রকারের মতো করে চালিত করার চেষ্টা করি তখনও আমরা বি এর আচরণ পেয়ে থাকি drawdrawআচরণ বহুরুপী হয়।

কিছু ভাষায়, পলিমারফিজম এবং উত্তরাধিকারের সাথে খুব বেশি ঘনিষ্ঠভাবে সম্পর্ক নেই। সি ++ এ, উদাহরণস্বরূপ, ভার্চুয়াল হিসাবে ঘোষিত নয় এমন ফাংশনগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয়, তবে গতিশীলভাবে প্রেরণ করা হবে না, সুতরাং আপনি উত্তরাধিকার ব্যবহার করার পরেও আপনি সেই বহুবিক আচরণ পাবেন না।

জাভাস্ক্রিপ্টে, প্রতিটি ফাংশন কল গতিশীলভাবে প্রেরণ করা হয় এবং আপনার টাইপিং দুর্বল। এর অর্থ হল আপনারা নিজের মতো করে কোনও সম্পর্কযুক্ত অবজেক্টের গুচ্ছ রাখতে পারেন, তাদের drawউপর একটি ফাংশন পুনরাবৃত্তি করতে এবং ফাংশনটি কল করতে পারেন এবং প্রতিটি ঠিকঠাক আচরণ করবে। উত্তরাধিকারের প্রয়োজন ছাড়াই আপনার নিজস্ব পলিমারফিক ড্র হয়।


12

বহুমুখিতা: ধরুন আপনি কলম বিক্রি করে এমন একটি প্রতিষ্ঠানের হয়ে কাজ করছেন। সুতরাং আপনি "কলম" নামে একটি খুব সুন্দর ক্লাস তৈরি করেছেন যা কলমের বিষয়ে আপনার যা জানা দরকার তা পরিচালনা করে। আপনি বিল, শিপিং, চালান তৈরি, পেন ক্লাস ব্যবহার করে সব ধরণের ক্লাস লেখেন। একদিন বস এসে বলে, "দুর্দান্ত খবর! সংস্থাটি বাড়ছে এবং আমরা এখন বই ও সিডি বিক্রি করছি!" দুর্দান্ত সংবাদ নয় কারণ এখন আপনাকে বুক ও সিডি ব্যবহার করতে পেন ব্যবহার করা প্রতিটি ক্লাস পরিবর্তন করতে হবে। তবে আপনি যদি মূলত "বিক্রয়যোগ্য পণ্য" নামে একটি ইন্টারফেস তৈরি করে থাকেন এবং পেন এই ইন্টারফেসটি প্রয়োগ করে। তারপরে আপনি পেনের পরিবর্তে আপনার ইন্টারফেসটি ব্যবহার করার জন্য আপনার সমস্ত শিপিং, চালান ইত্যাদি ক্লাস লিখে রাখতে পারতেন। এখন আপনাকে যা করতে হবে তা হল বুক এবং কমপ্যাক্ট ডিস্ক নামে একটি নতুন শ্রেণি তৈরি করা যা বিক্রয়যোগ্য প্রোডাক্ট ইন্টারফেস প্রয়োগ করে। পলিমারফিজমের কারণে, অন্যান্য শ্রেণীর সমস্তই পরিবর্তন ছাড়াই কাজ চালিয়ে যেতে পারত! ধারণা তৈরী কর?

সুতরাং, এর অর্থ হেরিরিটেন্স ব্যবহার করা যা পলিমারফিজম অর্জনের অন্যতম উপায়।

পলিমারহিজম কোনও শ্রেণি / ইন্টারফেসে সম্ভব হতে পারে তবে উত্তরাধিকার সর্বদা 2 বা আরও বেশি ক্লাস / ইন্টারফেসের মধ্যে থাকে। উত্তরাধিকার সর্বদা "এক-" সম্পর্কের সাথে সঙ্গতিপূর্ণ হয় যদিও এটি সর্বদা পলিমারফিজমের সাথে থাকে না (যা "" -এ "/" হ্যাস-এ "সম্পর্ক উভয়কেই মেনে নিতে পারে।


6

উত্তরাধিকার হ'ল একটি স্থিতিশীল জিনিস (এক শ্রেণি অন্য আরেকটি প্রসারিত হয়) যখন পলিমার্ফিজম একটি গতিশীল / রানটাইম জিনিস (কোনও বস্তু তার গতিশীল / রানটাইম টাইপ অনুযায়ী তার স্ট্যাটিক / ঘোষণার ধরণের সাথে আচরণ করে না)।

যেমন

// This assignment is possible because B extends A
A a = new B();
// polymorphic call/ access
a.foo();

-> যদিও স্ট্যাটিক / ডিক্লেয়ারেশন ধরণের A হ'ল প্রকৃত গতিশীল / রানটাইম টাইপ B এবং সুতরাং a.foo () এ এ-তে নয় বি তে সংজ্ঞায়িতভাবে ফু কার্যকর করবে


3

পলিমারফিজম হ'ল ধরণের বৈশিষ্ট্যগুলির মধ্যে একই ধরনের বৈশিষ্ট্যগুলির মধ্যে সাধারণ আচরণ প্রকাশ করার একটি পদ্ধতি। এটি ওভাররাইডিংয়ের মাধ্যমে সেই বৈশিষ্ট্যগুলির বিভিন্নতা তৈরি করার অনুমতি দেয়। উত্তরাধিকার হ'ল বস্তু শ্রেণিবিন্যাসের মাধ্যমে বহুপদীতা অর্জনের একটি উপায় যেখানে বস্তুগুলি সম্পর্ক এবং বিমূর্ত আচরণ প্রকাশ করে। পলিমারফিজম অর্জনের একমাত্র উপায় এটি নয়। বংশগতি থেকে পৃথক বহুবর্ষবাদ প্রকাশ করার জন্য প্রোটোটাইপ হ'ল আরেকটি উপায়। জাভাস্ক্রিপ্ট এমন একটি ভাষার উদাহরণ যা প্রোটোটাইপ ব্যবহার করে। আমি ভাবতে পারি এর অন্যান্য উপায়ও আছে।


3

উত্তরাধিকার কোড পুনরায় ব্যবহার সম্পর্কিত একটি ধারণা related উদাহরণস্বরূপ, যদি আমার কোনও অভিভাবক শ্রেণি Animalথাকে এবং এটিতে কিছু নির্দিষ্ট বৈশিষ্ট্য এবং পদ্ধতি থাকে (উদাহরণস্বরূপ এটি বলুন makeNoise()এবং sleep()) এবং আমি দুটি শিশু ক্লাস তৈরি করি Dogএবং বলে Cat। যেহেতু উভয় কুকুর এবং বিড়াল একই ফ্যাশন ঘুমাতে যাই (আমি অনুমান করা হবে) এর অধিক কার্যকারিতার যোগ করার জন্য কোন প্রয়োজন নেই sleep()পদ্ধতি Dogএবং Catপিতা বা মাতা বর্গ দ্বারা উপলব্ধ উপশ্রেণী Animal। যাইহোক, একটি Dogছাল এবং একটি Catmeows তাই যদিওAnimalশ্রেণিতে শব্দ করার জন্য একটি পদ্ধতি থাকতে পারে, একটি কুকুর এবং একটি বিড়াল একে অপরকে এবং অন্যান্য প্রাণীদের সাথে সম্পর্কিত বিভিন্ন শব্দ করে ises সুতরাং, তাদের নির্দিষ্ট ধরণের জন্য সেই আচরণটি নতুন করে সংজ্ঞায়িত করা দরকার। সুতরাং বহুবর্ষের সংজ্ঞা। আশাকরি এটা সাহায্য করবে.


3

ওরাকল ডকুমেন্টেশন পার্থক্যটিকে যথাযথভাবে উদ্ধৃত করেছে।

উত্তরাধিকার: একটি শ্রেণি প্রত্যক্ষ বা অপ্রত্যক্ষ যাই হোক না কেন, তার সমস্ত সুপারক্লাস থেকে ক্ষেত্র এবং পদ্ধতি উত্তরাধিকার সূত্রে প্রাপ্ত । একটি সাবক্লাস তার উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিগুলিকে ওভাররাইড করতে পারে বা এটি উত্তরাধিকার সূত্রে প্রাপ্ত ক্ষেত্র বা পদ্ধতিগুলি লুকিয়ে রাখতে পারে । (দ্রষ্টব্য যে ক্ষেত্রগুলি লুকিয়ে রাখা সাধারণত প্রোগ্রামিংয়ের খারাপ অভ্যাস))

পলিমারফিজম: পলিমারফিজম জীববিজ্ঞানের এমন একটি নীতিকে বোঝায় যেখানে কোনও জীব বা প্রজাতির বিভিন্ন রূপ বা ধাপ থাকতে পারে। এই নীতিটি অবজেক্ট ভিত্তিক প্রোগ্রামিং এবং জাভা ভাষার মতো ভাষাগুলিতেও প্রয়োগ করা যেতে পারে। একটি শ্রেণীর সাবক্লাসগুলি তাদের নিজস্ব অনন্য আচরণগুলি সংজ্ঞায়িত করতে পারে এবং তবুও পিতামাতার শ্রেণির একই কার্যকারিতা কিছু ভাগ করতে পারে।

বহুকোষ ক্ষেত্রের জন্য প্রযোজ্য নয়।

সম্পর্কিত পোস্ট:

পলিমারফিজম বনাম ওভাররাইডিং বনাম ওভারলোডিং


1

পলিমারফিজম উত্তরাধিকারের একটি প্রভাব । এটি কেবল এমন ক্লাসগুলিতে ঘটতে পারে যা একে অপরকে প্রসারিত করে। এটি আপনাকে ক্লাসের সঠিক ধরণের না জেনে কোনও ক্লাসের পদ্ধতিগুলি কল করতে দেয়। এছাড়াও, পলিমারফিজম রান সময় হয়

উদাহরণস্বরূপ, জাভা বহুকর্ম উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

উত্তরাধিকার সূত্রে প্রাপ্ত উত্পন্ন ক্লাসগুলি তাদের বেস ক্লাসগুলির ইন্টারফেস এবং কোড ভাগ করতে দেয়। এটি সংকলন সময়ে ঘটে ।

উদাহরণস্বরূপ, জাভা প্ল্যাটফর্মের সমস্ত শ্রেণিগুলি অবজেক্টের বংশদ্ভুত (চিত্র সৌজন্যে ওরাকল):

এখানে চিত্র বর্ণনা লিখুন

জাভা উত্তরাধিকার এবং জাভা পলিমারফিজম সম্পর্কে আরও জানতে


0

উত্তরাধিকার হ'ল শ্রেণি এ তার সমস্ত অভিভাবকের কাছ থেকে অবজেক্ট অবধি সমস্ত ননস্ট্যাটিক সুরক্ষিত / পাবলিক পদ্ধতি / ক্ষেত্রগুলির উত্তরাধিকার সূত্রে আসে।


0

আপনি জাভা ব্যবহার করলে এটি এর মতোই সহজ:

পলিমারফিজম উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিগুলি ব্যবহার করছে তবে কিছু আলাদা করার জন্য তাদের "ওভাররাইডিং" করছে (বা আপনি যদি সুপার ডাকেন তবে প্রযুক্তিগতভাবে বহুবর্ষীয় হবে না)।

আমি ভুল হলে শুধরে.


0

পলিমারফিজমের মূল উদ্দেশ্য : সুপার ক্লাসে রেফারেন্স ভেরিয়েবল তৈরি করা এবং সাবক্লাস অবজেক্ট => ধরে রাখা একাধিক আচরণ করতে পারে

ইন উত্তরাধিকার , উপশ্রেণী বৈশিষ্ট্য উত্তরাধিকারী সুপার বর্গ


0

উত্তরাধিকার হ'ল একপ্রকার বহুবর্ষ, ঠিক বাস্তবে উত্তরাধিকার হ'ল গতিশীল পলিমারফিজম। সুতরাং, যখন আপনি উত্তরাধিকার সরিয়ে ফেলেন আপনি আর ওভাররাইড করতে পারবেন না।


0

সঙ্গে উত্তরাধিকার বাস্তবায়ন সুপারক্লাস সংজ্ঞায়িত করা হয় - তাই আচরণ উত্তরাধিকারসূত্রে করা হয়।

class Animal
{
  double location;
  void move(double newLocation)
  {
    location = newLocation;
  }
}

class Dog extends Animal;

সঙ্গে পলিমরফিজ্ম বাস্তবায়ন উপশ্রেণী সংজ্ঞায়িত করা হয় - তাই শুধু ইন্টারফেস উত্তরাধিকারসূত্রে করা হয়।

interface Animal
{
  void move(double newLocation);
}

class Dog implements Animal
{
  double location;
  void move(double newLocation)
  {
    location = newLocation;
  }
}

0

পলিমরফিজ্ম করে এটা করা যায় উত্তরাধিকার মধ্যে Java

├── Animal
└── (instances)
    ├── Cat
    ├── Hamster
    ├── Lion
    └── Moose

├── interface-for-diet
   ├── Carnivore
   └── Herbivore
├── interface-for-habitat
   ├── Pet
   └── Wild

public class Animal {
    void breath() {
    };
}

public interface Carnivore {
    void loveMeat();
}

public interface Herbivore {
    void loveGreens();
}

public interface Pet {
    void liveInside();
}

public interface Wild {
    void liveOutside();
}

public class Hamster extends Animal implements Herbivore, Pet {

    @Override
    public void liveInside() {
        System.out.println("I live in a cage and my neighbor is a Gerbil");
    }

    @Override
    public void loveGreens() {
        System.out.println("I eat Carrots, Grapes, Tomatoes, and More");
    }
}

public class Cat extends Animal implements Carnivore, Pet {
    @Override
    public void liveInside() {
        System.out.println("I live in a cage and my neighbr is a Gerbil");
    }

    @Override
    public void loveMeat() {
        System.out.println("I eat Tuna, Chicken, and More");
    }
}

public class Moose extends Animal implements Herbivore, Wild {

    @Override
    public void liveOutside() {
        System.out.println("I live in the forest");
    }

    @Override
    public void loveGreens() {
        System.out.println("I eat grass");
    }
}

public class Lion extends Animal implements Carnivore, Wild {

    @Override
    public void liveOutside() {
        System.out.println("I live in the forest");
    }

    @Override
    public void loveMeat() {
        System.out.println("I eat Moose");
    }
}

Hamsterবর্গ উত্তরাধিকারী গঠন থেকে Animal, Herbivoreএবং Petপ্রদর্শন করা বহুরুপী চেষ্টিতবাদ একটি ঘরোয়া পোষা প্রাণীর।

Catবর্গ উত্তরাধিকারী গঠন থেকে Animal, Carnivoreএবং Petএছাড়াও প্রদর্শন বহুরুপী চেষ্টিতবাদ একটি ঘরোয়া পোষা প্রাণীর।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.