কোনও পদ্ধতি ওভারলোডিং এবং জাভাতে ওভাররাইড করার মধ্যে পার্থক্য কী?


10

কোনও পদ্ধতি ওভারলোডিং এবং জাভাতে ওভাররাইড করার মধ্যে পার্থক্য কী?

পদ্ধতির স্বাক্ষর, অ্যাক্সেস নির্দিষ্টকরণকারী, রিটার্নের ধরণ ইত্যাদির মধ্যে কি পার্থক্য রয়েছে?


3
পিএইচপি-তে ওভারলোডিংয়ের সম্পূর্ণ আলাদা অর্থ রয়েছে
লর্টাব্যাক

উত্তর:


41

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

boolean isOdd(int number) { ... };
boolean isOdd(float number) { ... };

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

যখন কোনও পদ্ধতি ওভাররাইড করা হয়, তখন নতুন পদ্ধতির একই স্বাক্ষর থাকে এবং কিছু ক্ষেত্রে ওভাররাইড পদ্ধতিটি প্রতিস্থাপন করে। এখানে একটি ওভাররাইড পদ্ধতির উদাহরণ:

public class A 
{
     public void someMethod() { ... }
}

public class B extends A
{
     public void someMethod() { ... }
}

পছন্দটি বস্তুর ধরণের ভিত্তিতে করা হয়। উদাহরণ স্বরূপ,

A someA = new B();
someA.someMethod();

ডাকব someMethodএর B। আপনি @ ওভাররাইড টীকা যোগ করতে (এবং হওয়া উচিত):

public class B extends A
{
     @Override
     public void someMethod() { ... }
}

এখন, আপনি যদি ঘটনাক্রমে বি তে প্যারামিটারগুলি পরিবর্তন করেন তবে সংকলক আপনাকে অবহিত করবে যে আপনি কোনও মেঠোড () কে ওভাররাইড করছেন না বরং এটি ওভারলোড করছেন।


@ স্কারফ্রিজ, সম্পাদনার জন্য ধন্যবাদ। যুগ যুগ ধরে জাভা নিয়ে প্রোগ্রামিং করা হয়নি এবং অনেক কিছু ভুলে গেছে)))
সুপারম

1
@ ওভাররাইড টীকাগুলি উল্লেখ করার জন্য ধন্যবাদ এবং কেবল যে ভিন্ন ভিন্ন রিটার্নের ধরণগুলি কোনও পদ্ধতিকে ওভাররাইড করে না, পরিবর্তে ওভারলোডের কারণ করে।
ড্যানিয়েল ডিনিজ

13

ওভারলোডিং, পদ্ধতিগুলির একই নাম তবে বিভিন্ন পরামিতি রয়েছে।

ওভাররাইডিং, বেস শ্রেণিতে প্রদত্ত বাস্তবায়নটি উপ-শ্রেণীর পরিবর্তে প্রতিস্থাপন করা হবে।


1
দয়া করে এটিকে সম্পাদনা / প্রসারিত করবেন না। সংক্ষিপ্তসার বিন্দু।
নিমচিম্পস্কি

7

আপনি যে ধারণাগুলি সম্পর্কে জিজ্ঞাসা করছেন সেগুলি জাভা টিউটোরিয়ালে অন্তর্ভুক্ত।

ওভাররাইডের জন্য ব্যাখ্যা নীচে দেওয়া হল:

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

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

কোনও পদ্ধতিকে ওভাররাইড করার সময়, আপনি সুপারোক্লাসে কোনও পদ্ধতিকে @Overrideওভাররাইড করার উদ্দেশ্যে যে সংকলকটি নির্দেশ করেন সেটি নির্দেশক নির্দেশিকাটি ব্যবহার করতে পারেন । যদি, কোনও কারণে, সংকলকটি সনাক্ত করে যে কোনও একটি সুপারক্লাসে পদ্ধতিটি বিদ্যমান নেই, তবে এটি একটি ত্রুটি তৈরি করবে। আরও তথ্যের জন্য @Override, টিকা দেখুন ...

টিউটোরিয়ালে নীচে ওভারলোডিং সম্পর্কে ব্যাখ্যা করা হয়েছে:

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

মনে করুন যে আপনার কাছে এমন একটি শ্রেণি রয়েছে যা বিভিন্ন ধরণের ডেটা (স্ট্রিং, পূর্ণসংখ্যা এবং এই জাতীয়) আঁকার জন্য ক্যালিগ্রাফি ব্যবহার করতে পারে এবং এতে প্রতিটি ডাটা টাইপ আঁকার জন্য একটি পদ্ধতি রয়েছে। এটা তোলে প্রতিটি পদ্ধতির-উদাহরণস্বরূপ, এর জন্য একটি নতুন নাম ব্যবহার করতে কষ্টকর হয় drawString, drawInteger, drawFloat, ইত্যাদি। জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজে আপনি সমস্ত অঙ্কন পদ্ধতির জন্য একই নাম ব্যবহার করতে পারেন তবে প্রতিটি পদ্ধতির জন্য আলাদা যুক্তি তালিকাটি পাস করতে পারেন। সুতরাং, ডেটা অঙ্কন শ্রেণীর নামকরণের চারটি পদ্ধতি ঘোষণা করা যেতে পারে draw, যার প্রত্যেকটির আলাদা প্যারামিটারের তালিকা রয়েছে ...

ওভারলোড হওয়া পদ্ধতিগুলি সংখ্যাটিতে এবং পদ্ধতিতে পাস হওয়া আর্গুমেন্টের ধরণের দ্বারা পৃথক হয় ...

আপনি একই নাম এবং একই সংখ্যা এবং ধরণের আর্গুমেন্ট সহ একাধিক পদ্ধতিকে ডিক্লেয়ার করতে পারবেন না, কারণ সংকলক এগুলি আলাদা করতে পারে না।

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


দ্রষ্টব্য: অতিরিক্ত লোড পদ্ধতিগুলি খুব কম ব্যবহার করা উচিত, কারণ তারা কোডটি খুব কম পাঠযোগ্য করে তুলতে পারে।


ওভারলোডিংয়ের উপরোক্ত ব্যাখ্যাটিতে "ইন্টারফেস এবং উত্তরাধিকার" শীর্ষক পাঠে আলোচিত যোগ্যতার উল্লেখ রয়েছে :

একটি সাবক্লাসে, আপনি সুপারক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিগুলি ওভারলোড করতে পারেন। এই ধরনের ওভারলোডেড পদ্ধতিগুলি সুপারক্লাসের পদ্ধতিগুলি আড়াল করে না বা ওভাররাইড করে না — এগুলি নতুন পদ্ধতি, সাবক্লাসের জন্য অনন্য।


2

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

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

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