1. কিন্তু যে সব না.

ধরুন Cowক্লাসের একটি printAll()পদ্ধতি আছে যা অন্য দুটি পদ্ধতিকে কল করে। তারপর কোড এই মত কাজ করবে:

কোড বর্ণনা
class Cow
{
   public void printAll()
   {
      printColor();
      printName();
   }

   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
public static void main(String[] args)
{
   Whale whale = new Whale ();
   whale.printAll();
}
পর্দার আউটপুট হবে:
I'm a white whale
I'm a whale

লক্ষ্য করুন যে যখন printAll()ক্লাসের মেথডটিকে কোনোCow অবজেক্টে কল করা হয় , তখন ক্লাসের মেথড ব্যবহার করা হয়, মেথডের মধ্যে নয় ।WhaleprintNameWhaleCow

প্রধান জিনিসটি পদ্ধতিটি যে ক্লাসে লেখা হয়েছে তা নয়, বরং বস্তুটির ধরন (শ্রেণী) যা পদ্ধতিটি বলা হয়েছে।

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

Whaleউত্তরাধিকার এবং পদ্ধতি ওভাররাইডিং প্রয়োগ করার পরে ক্লাসটি কেমন দেখায় তা এখানে :

class Whale
{
   public void printAll()
   {
      printColor();
      printName();
   }

   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
উত্তরাধিকার এবং পদ্ধতি ওভাররাইডিং প্রয়োগ করার পরে ক্লাসটি কেমন দেখায় তা এখানে : আমরা কোনও পুরানো পদ্ধতি Whaleসম্পর্কে জানি না ।printName

2. টাইপকাস্টিং

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

কোড বর্ণনা
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printColor();
}
পর্দার আউটপুট হবে:
I'm a white whale
public static void main(String[] args)
{
   Cow cow = new Whale();
   cow.printColor();
}
পর্দার আউটপুট হবে:
I'm a white whale
public static void main(String[] args)
{
   Object o = new Whale();
   System.out.println(o.toString());
}
পর্দার আউটপুট হবে:
Whale@da435a.

পদ্ধতিটি ক্লাস toString()থেকে উত্তরাধিকারসূত্রে প্রাপ্তObject

এটি একটি খুব মূল্যবান সম্পত্তি: একটু পরে আপনি অনুশীলনে এটি কীভাবে ব্যবহার করবেন তা বুঝতে পারবেন।


3. একটি বস্তুর উপর একটি পদ্ধতি কল

যখন একটি ভেরিয়েবলের উপর একটি পদ্ধতি কল করা হয়, তখন পদ্ধতিটি আসলে একটি বস্তুর উপর কল করা হয়। এই প্রক্রিয়াটিকে গতিশীল পদ্ধতি প্রেরণ বলা হয়।

এটি দেখতে কেমন তা এখানে:

কোড বর্ণনা
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
পর্দার আউটপুট হবে:
I'm a whale
public static void main(String[] args)
{
   Cow cow = new Whale();
   cow.printName();
}
পর্দার আউটপুট হবে:
I'm a whale

মনে রাখবেন যে পদ্ধতির নির্দিষ্ট বাস্তবায়নটি printName()যা বলা হয় — একটি Cowবা ক্লাসের একটি Whaleভেরিয়েবলের ধরন দ্বারা নির্ধারিত হয় না, তবে ভেরিয়েবলটি যে অবজেক্টটিকে বোঝায় তার ধরন দ্বারা।

ভেরিয়েবল Cowএকটি বস্তুর একটি রেফারেন্স সংরক্ষণ করে Whale, এবং printName()ক্লাসে সংজ্ঞায়িত পদ্ধতিকে Whaleবলা হয়।

এই খুব স্পষ্ট নয়. প্রধান নিয়ম মনে রাখবেন:

ভেরিয়েবলের উপর কল করার জন্য উপলব্ধ পদ্ধতির সেট ভেরিয়েবলের ধরন দ্বারা নির্ধারিত হয়। এবং নির্দিষ্ট পদ্ধতি বাস্তবায়ন যা কল করা হয় তা পরিবর্তনশীল দ্বারা উল্লেখ করা বস্তুর ধরন/শ্রেণী দ্বারা নির্ধারিত হয়।

আপনি সর্বদা এটির মুখোমুখি হবেন, তাই যত তাড়াতাড়ি আপনি এটি মনে রাখবেন ততই ভাল।