ওভারলোডিং এবং ওভাররাইডিং


104

ওভারলোডিং এবং ওভাররাইডের মধ্যে পার্থক্য কী।


2
@ জেমস: আপনি কি কমপক্ষে গুগল চেষ্টা করেছেন ??
মিচ গম 15

আমি অনুমান করছি আপনি এটি পাবেন না।
জন বি

জেমস- সম্ভবত না এবং আমি বেশ নির্বোধ মনে করি একটি সাধারণ ধারণাটি ব্যাখ্যা করতে সক্ষম হচ্ছি না

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

: আপনি এই লিঙ্কে আরও পড়তে পারেন intquesans.blogspot.com/2011/05/...

উত্তর:


219

ওভারলোডিং

ওভারলোডিং হ'ল যখন আপনার একই স্কোপের একাধিক পদ্ধতি থাকে তবে একই নামের সাথে আলাদা আলাদা স্বাক্ষর থাকে।

//Overloading
public class test
{
    public void getStuff(int id)
    {}
    public void getStuff(string name)
    {}
}

উপেক্ষা করা

ওভাররাইডিং এমন একটি নীতি যা আপনাকে একটি শিশু শ্রেণিতে কোনও পদ্ধতির কার্যকারিতা পরিবর্তন করতে দেয়।

//Overriding
public class test
{
        public virtual void getStuff(int id)
        {
            //Get stuff default location
        }
}

public class test2 : test
{
        public override void getStuff(int id)
        {
            //base.getStuff(id);
            //or - Get stuff new location
        }
}

1
আমি এই উত্তরটি @ ক্লারিনোকে ভালবাসি .. ধন্যবাদ
ফেরাক্কেম ভূঁইয়া

1
@cgreeno আমি মনে করি তোমাকে মিস করি voidজন্য getStuffমধ্যেtest2
মাহদি

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

আরে, এটি পুরানো হতে পারে তবে আমার এখনও এই সম্পর্কে একটি প্রশ্ন আছে। ওভারলোডিং কি 'এক' পদ্ধতির সাথে আরও কার্যকারিতা পাওয়ার জন্য উপলব্ধ করে? যেমন আমি এটি করতে পারি: getStuff(2, "Hello world!");বা আমি এটি করতে পারি getStuff("Myname", "Mysurname", "Hello World!");? যে কেউ নিশ্চিত করতে পারেন যে এটি করার উপায়?
Sj03rs

আমি মনে করি যে ওভাররাইডিং উদাহরণটি আসলে ওভাররাইটিং হয়, ওভাররাইড হয় যখন আপনি সুপার ক্লাস পদ্ধতিটি দুর্ঘটনাজনিতভাবে ওভাররাইড হয়ে যান বা যদি আপনি উভয় ক্ষেত্রেই নতুন কীওয়ার্ডটি ব্যবহার করে ওভাররাইড বা ওভাররাইট করে তা বোঝাতে চান, যখন আপনি প্যারেন্ট পি = নতুন ঘোষণা করেন তখন আচরণটি বিযুক্ত হয়ে উঠবে শিশু (); p.Method (); ... সম্ভবত আমি ভুল এবং এটি প্রায় একই জিনিস করার অন্য উপায়। এটা আমার চেয়ে ভাল কেউ ব্যাখ্যা করতে পারেন?
ক্রিস্টিনা ক্যারাসকো

35

ওভারলোডিং এবং ওভাররাইডিংয়ের সহজ সংজ্ঞা

ওভারলোডিং (টাইম পলিমারফিজম সংকলন) :: একই নাম এবং বিভিন্ন পরামিতি সহ ফাংশন

public class A
{
    public void print(int x, int y)
    {
        Console.WriteLine("Parent Method");
    }
}

public class B : A
{
    public void child()
    {
        Console.WriteLine("Child Method");
    }

    public void print(float x, float y)
    {
        Console.WriteLine("Overload child method");
    }
}

ওভাররাইডিং (রান টাইম পলিমারফিজম) :: বেস ক্লাসের মতো একই নাম এবং একই পরামিতি সহ বর্ধিত শ্রেণিতে ফাংশন, তবে বিভিন্ন আচরণের সাথে।

public class A
{
    public virtual void print()
    {
        Console.WriteLine("Parent Method");
    }
}

public class B : A
{
    public void child()
    {
        Console.WriteLine("Child Method");
    }

    public override void print()
    {
        Console.WriteLine("Overriding child method");
    }
}

সম্ভবত আপনি যুক্ত করতে চান যে ওভাররাইডিং ধারণাটি প্যারেন্ট ক্লাস-সাব-ক্লাস সম্পর্কের জন্য প্রযোজ্য।
ফ্রেইকিউজার

10

আমি এমন একটি উদাহরণ ভাগ করতে চাই যা আমি যখন শিখছিলাম তখন তা আমার কাছে অনেকটা উপলব্ধি হয়েছিল:

এটি কেবলমাত্র একটি উদাহরণ যা ভার্চুয়াল পদ্ধতি বা বেস শ্রেণীর অন্তর্ভুক্ত নয়। শুধু মূল ধারণা সম্পর্কিত একটি ইঙ্গিত দিতে।

ধরা যাক একটি যানবাহন ওয়াশিং মেশিন রয়েছে এবং এটিতে "ওয়াশ" নামে পরিচিত একটি ফাংশন রয়েছে এবং গাড়িটি একধরণের হিসাবে গ্রহণ করে।

গাড়ী ইনপুট পায় এবং গাড়ী ধোয়া।

public void Wash(Car anyCar){
       //wash the car
}

আসুন ওভারলোড ওয়াশ () ফাংশনটি আসুন

ওভারলোডিং:

public void Wash(Truck anyTruck){
   //wash the Truck  
}

ওয়াশ ফাংশনটি কেবল আগে একটি গাড়ি ধৌত করত, তবে এখন ট্রাকে ধুয়ে দেওয়ার জন্য এটির ওভারলোড।

  • প্রদত্ত ইনপুট অবজেক্টটি যদি কার হয় তবে এটি ওয়াশ (গাড়ি যে কোনও গাড়ি) চালায়
  • প্রদত্ত ইনপুট অবজেক্টটি যদি কোনও ট্রাক হয় তবে এটি ওয়াশ কার্যকর করবে (ট্রাক যে কোনও ট্র্যাক)

আসুন ওয়াশ () ফাংশনটি ওভাররাইড করি

উপেক্ষা করা:

public override void Wash(Car anyCar){
   //check if the car has already cleaned
   if(anyCar.Clean){ 
       //wax the car
   }
   else{
       //wash the car
       //dry the car
       //wax the car
   }     
}

গাড়িটি ইতিমধ্যে পরিষ্কার কিনা এবং আবার ধোয়া দরকার নেই কিনা তা পরীক্ষা করার জন্য এখন ওয়াশ ফাংশনটির একটি শর্ত রয়েছে।

  • গাড়িটি যদি পরিষ্কার থাকে তবে কেবল এটি মোম করুন।

  • যদি পরিষ্কার না হয় তবে প্রথমে গাড়িটি ধুয়ে ফেলুন, তারপর এটি শুকনো করুন এবং তারপরে এটি মোম করুন

সুতরাং কার্যকারিতা একটি নতুন কার্যকারিতা যুক্ত করে বা সম্পূর্ণ আলাদা কিছু করে ওভাররাইড করা হয়েছে।


1
এটি অবশ্যই উত্তর হতে হবে। ভোট দিয়েছেন +
জ্যাক

9
  • ওভারলোডিং = একাধিক পদ্ধতির স্বাক্ষর, একই পদ্ধতির নাম
  • ওভাররাইডিং = একই পদ্ধতিতে স্বাক্ষর (ভার্চুয়াল ঘোষিত), সাব ক্লাসে প্রয়োগ করা হয়েছে

একজন চমকপ্রদ সাক্ষাত্কারকারীর সাথে অনুসরণ করা উচিত:

ওভাররাইডিং এবং শেডিংয়ের মধ্যে পার্থক্য কী?


কখনই জানত না এটাকে ছায়া বলা হয়, জানা ভাল। কেবলমাত্র ওভারলোডিং এবং ওভাররাইডিংয়ের সাথে ওভারড্রাইডিং হচ্ছে relation
স্যামুয়েল

4

মাইকেল যেমন বলেছেন:

  • ওভারলোডিং = একাধিক পদ্ধতির স্বাক্ষর, একই পদ্ধতির নাম
  • ওভাররাইডিং = একই পদ্ধতিতে স্বাক্ষর (ভার্চুয়াল ঘোষিত), সাব ক্লাসে প্রয়োগ করা হয়েছে

এবং

  • ছায়া গোছা = যদি ডেরিভডক্লাস হিসাবে ধরা হয় তবে এটি উত্পন্ন পদ্ধতিটি ব্যবহার করে, যদি বেসক্লাস হিসাবে এটি বেস পদ্ধতিটি ব্যবহার করে।

3

একই নামে তবে বিভিন্ন পরামিতি সহ একাধিক পদ্ধতি / নির্মাণকারী থাকা ওভারলোডিং বলে। এটি একটি সংকলন সময় ইভেন্ট।

Class Addition 
{
   int add(int a, int b) 
   {
     return a+b;
   }
   int add(int a, int b, int c)
   {
     return a+b+c;
   }

   public static main (String[] args) 
   {
     Addition addNum = new Addition();
     System.out.println(addNum.add(1,2));
     System.out.println(addNum.add(1,2,3));
   }
}

হে; / p &:

3
6

ওভাররাইডিং একটি রান টাইম ইভেন্ট, যার অর্থ আপনার কোডের উপর ভিত্তি করে রান সময় আউটপুট পরিবর্তিত হয়।

class Car
{
    public int topSpeed() 
    {
        return 200;
    }
}
class Ferrari extends Car
{
    public int topSpeed()
    {
        return 400;
    }
    public static void main(String args[])
    {
        Car car = new Ferrari();
        int num= car.topSpeed();
        System.out.println("Top speed for this car is: "+num);
    }
}

টপস্পিড () উভয় শ্রেণিতে একটি সাধারণ পদ্ধতি রয়েছে তা লক্ষ্য করুন। যেহেতু আমরা একটি ফেরারি ইনস্ট্যান্ট করেছি, আমরা আলাদা ফলাফল পেয়েছি।

হে; / p &:

Top speed for this car is: 400

2

সি # তে কীওয়ার্ড ওভাররাইড ছাড়া গোপন ওভাররাইডের মতো কোনও জাভা নেই তে ওভাররাইড পদ্ধতিতে ! এই সি # বাস্তবায়ন দেখুন:

ওভাররাইড ছাড়াই ভেরিয়েন্ট 1 : ফলাফল 200

    class Car {
        public int topSpeed() {
            return 200;
        }
    }

    class Ferrari : Car {
        public int topSpeed(){
                return 400;
        }
    }

    static void Main(string[] args){
        Car car = new Ferrari();
        int num= car.topSpeed();
        Console.WriteLine("Top speed for this car is: "+num);
        Console.ReadLine();
    }

ওভাররাইড কীওয়ার্ড সহ ভেরিয়েন্ট 2 : ফলাফল 400

    class Car {
        public virtual int topSpeed() {
            return 200;
        }
    }

    class Ferrari : Car {
        public override int topSpeed(){
                return 400;
        }
    }

    static void Main(string[] args){
        Car car = new Ferrari();
        int num= car.topSpeed();
        Console.WriteLine("Top speed for this car is: "+num);
        Console.ReadLine();
    }

কার শ্রেণিতে কীওয়ার্ড ভার্চুয়াল জাভাতে চূড়ান্ত হওয়ার বিপরীতে , এর অর্থ চূড়ান্ত নয় , আপনি গাড়িটি বিমূর্ত করতে পারলে ওভাররাইড করতে পারেন বা প্রয়োগ করতে পারেন


1

ছায়া কাটা = উদ্ভূত শ্রেণিতে দুটি সংজ্ঞা বজায় রাখে এবং বেস শ্রেণীর সংজ্ঞা প্রবর্তনের জন্য এটি শ্রেণিবদ্ধ সংজ্ঞা এবং তদ্বিপরীত ছায়া (গোপন) করে।


1

যোগ করার অন্য একটি বিষয়।

ওভারলোডিং একই নাম সহ একাধিক পদ্ধতি। একই বা ভিন্ন রিটার্নের ধরণ। বিভিন্ন পরামিতি বা পরামিতিগুলির বিভিন্ন ধরণের। একই ক্লাস বা ডেরাইভড ক্লাসে।

int যোগ করুন (int num1, int num2) int যোগ করুন (int num1, int num2, int num3) ডাবল অ্যাড (int num1, int num2) ডাবল অ্যাড (ডাবল num1, ডাবল num2)

একই শ্রেণি বা উত্পন্ন ক্লাসে সম্ভব হতে পারে। সাধারণত একই শ্রেণিতে পছন্দ হয়। উদাহরণস্বরূপ কনসোল.উরাইটলাইন () এর 19 টি ওভারলোডেড পদ্ধতি রয়েছে।

ক্লাস নির্মাণকারী, পদ্ধতি ওভারলোড করতে পারেন।

সংকলন সময় (স্ট্যাটিক / আর্লি বাইন্ডিং) বহুরূপী হিসাবে বিবেচনা করতে পারে।

================================================== ================================================== =

ওভাররাইডিং একই ক্লাসে সম্ভব নয়। শ্রেণি পদ্ধতি, বৈশিষ্ট্য, সূচক, ইভেন্টগুলি ওভাররাইড করতে পারে।

ওভাররাইড বেস পদ্ধতিটি ভার্চুয়াল, বিমূর্ত বা ওভাররাইডের মতো হওয়া উচিত। ওভাররাইড পদ্ধতিটি পরিবর্তন করতে আপনি নতুন, স্ট্যাটিক বা ভার্চুয়াল সংশোধক ব্যবহার করতে পারবেন না।

রান টাইম (ডাইনামিক / লেট বাইন্ডিং) পলিমারফিজম হিসাবে বিবেচনা করতে পারে।

Http://msdn.microsoft.com/en-us/library/6fawty39.aspx সংস্করণে সহায়তা করে

================================================== ================================================== =

সাহা্য্যকারী লিংক

http://msdn.microsoft.com/en-us/library/ms173152.aspx টাইম পলিমারফিজম বনাম রান টাইম পলিমॉर्फিজম সংকলন করুন


Good one, with the needed details.
user3885927

1

Overloading is a part of static polymorphism and is used to implement different method with same name but different signatures. Overriding is used to complete the incomplete method. In my opinion there is no comparison between these two concepts, the only thing is similar is that both come with the same vocabulary that is over.


Captain here: Overloading a method gives you multiple signatures of different methods with the same name. Overriding hides an inherited member, either from classes or interfaces. flies away
SparK

1
@SparK Overriding doesn't hide a member. You can either override or hide an inherited member. The two are mutually exclusive options.
Servy

@Servy, wrong choice of words, I meant "substitutes".
SparK

0

Method overloading and Method overriding are 2 different concepts completely different. Method overloading is having the same method name but with different signatures. Method overriding is changing the default implementation of base class method in the derived class. Below you can find 2 excellent video tutorials explaining these concepts.

Method overriding Vs hiding

Method overloading


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