CodeGym /Java Blog /এলোমেলো /জাভাতে ইনস্ট্যান্সফ এবং ইনহেরিটেন্স
John Squirrels
লেভেল 41
San Francisco

জাভাতে ইনস্ট্যান্সফ এবং ইনহেরিটেন্স

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

উত্তরাধিকার

সুতরাং, উত্তরাধিকার কি? instanceof এবং উত্তরাধিকার 101 - 1 ইনহেরিটেন্স হল একটি প্রোগ্রামিং মেকানিজম (জাভা সহ) যা আপনাকে একটি বিদ্যমান ক্লাসের উপর ভিত্তি করে একটি নতুন ক্লাস ঘোষণা করতে দেয়। প্রাপ্ত শ্রেণী তারপর অভিভাবক শ্রেণীর ক্ষেত্র এবং পদ্ধতিতে অ্যাক্সেস লাভ করে। কেন আমরা এই প্রয়োজন হবে? ঠিক আছে, কল্পনা করুন যে আপনাকে একটি প্রোগ্রামে বেশ কয়েকটি গাড়ির ক্লাস তৈরি করতে হবে: ট্রাক, রেসকার, সেডান, পিকআপ ইত্যাদি৷ এমনকি কোনও কোড লেখার আগে, আপনি নিশ্চিতভাবে জানেন যে এই সমস্ত ক্লাসগুলির মধ্যে অনেক মিল রয়েছে: সমস্ত গাড়ির একটি মডেল রয়েছে নাম, উৎপাদনের বছর, ইঞ্জিনের আকার, সর্বোচ্চ গতি ইত্যাদি এই পরিস্থিতিতে, আপনি করতে পারেন:
  • প্রতিটি ক্লাসে এই ক্ষেত্রগুলি তৈরি করুন (আপনি এটি তৈরি করার সাথে সাথে প্রতিটি নতুন গাড়ির ক্লাসে এগুলি যুক্ত করুন)
  • অভিভাবক শ্রেণীতে সমস্ত গাড়ির সাধারণ ক্ষেত্রগুলি আনুন Car, এবং তারপর ক্লাস থেকে নির্দিষ্ট ধরণের গাড়ির জন্য সমস্ত শ্রেণী বের করতে বিস্তৃত শব্দটি ব্যবহার করুন৷Car
স্বাভাবিকভাবেই, দ্বিতীয় বিকল্পটি অনেক বেশি সুবিধাজনক:

public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }
}

public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}

public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
সর্বনিম্নভাবে, আমরা কোডের অপ্রয়োজনীয় নকল এড়াই (এবং প্রোগ্রাম লেখার সময় আমাদের সর্বদা এটির জন্য প্রচেষ্টা করা উচিত)। এছাড়াও, আমাদের কাছে একটি সাধারণ এবং বোধগম্য শ্রেণী কাঠামো রয়েছে, যেখানে সমস্ত গাড়ির জন্য সাধারণ ক্ষেত্রগুলিকে একটি শ্রেণিতে একীভূত করা হয়েছে৷ যদি ট্রাকগুলির কোনো বিশেষ ক্ষেত্র থাকে যা অন্য গাড়িগুলি করে না, তবে সেগুলি ক্লাসে ঘোষণা করা যেতে পারে Truck। একই পদ্ধতির জন্য যায়। সমস্ত গাড়ির কিছু সাধারণ আচরণ রয়েছে যা পদ্ধতিগুলির সাথে বর্ণনা করা যেতে পারে, যেমন গাড়ি শুরু করা, ত্বরণ/ব্রেক ইত্যাদি। এই সাধারণ পদ্ধতিগুলিকে অভিভাবক শ্রেণীতে একীভূত করা যেতে পারে, Carএবং প্রতিটি নির্দিষ্ট ধরণের গাড়ি তাদের প্রাপ্ত ক্লাসে তার অনন্য ক্রিয়াগুলিকে সংজ্ঞায়িত করতে পারে। .

public class Car {

   public void gas() {
       // Accelerate
   }

   public void brake() {
       // Brake
   }
}


public class F1Car extends Car {

   public void pitStop() {
      
       // Only race cars make pit stops
   }

   public static void main(String[] args) {
      
       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
আমরা ক্লাসে সমস্ত গাড়ির সাধারণ পদ্ধতিগুলি যুক্ত করেছি Car। কিন্তু, ক্লাসের দিকে তাকান F1Car, যা "ফর্মুলা 1" রেস কারের প্রতিনিধিত্ব করে। পিট স্টপ (জরুরী গাড়ী রক্ষণাবেক্ষণের জন্য স্টপ) শুধুমাত্র রেসে করা হয়, তাই আমরা এই নির্দিষ্ট কার্যকারিতা প্রাসঙ্গিক প্রাপ্ত ক্লাসে যোগ করেছি। instanceof এবং উত্তরাধিকার 101 - 2

অপারেটরের উদাহরণ

জাভাতে, একটি বিশেষ অপারেটর আছে, instanceof , একটি নির্দিষ্ট শ্রেণীর উপর ভিত্তি করে একটি বস্তু তৈরি করা হয়েছে কিনা তা পরীক্ষা করার জন্য। চেকের ফলাফলের উপর নির্ভর করে এটি সত্য বা মিথ্যা ফেরত দেয়। আমাদের গাড়ির উদাহরণে ক্লাস ব্যবহার করে এটি কীভাবে কাজ করে তা দেখা যাক:

public class Truck extends Car {

   public static void main(String[] args) {

       Truck truck = new Truck();
       System.out.println(truck instanceof Car);
   }
}
আউটপুট: true অপারেটর সত্যinstanceof ফেরত দেয় , যেহেতু আমাদের একটি বস্তু আছে এবং সমস্ত ট্রাক হল গাড়ি। শ্রেণী থেকে শ্রেণীটি উদ্ভূত হয়েছে । সমস্ত ট্রাক সাধারণ অভিভাবক, শ্রেণীর উপর ভিত্তি করে তৈরি করা হয়। অপারেটর কিভাবে ব্যবহার করা হয় তা ঘনিষ্ঠভাবে দেখুন । আপনি এটি একটি পিরিয়ড ছাড়াই লিখুন, যেহেতু এটি একটি অপারেটর, একটি পদ্ধতি নয় ("ক্লাসের অবজেক্ট ইনস্ট্যান্স")। আসুন অন্য উপায়ে চেষ্টা করি: TruckTruckCarCarinstanceof

public static void main(String[] args) {

   Car car = new Car();
   System.out.println(car instanceof Truck);
}
আউটপুট: false ক্লাস Car(এবং গাড়ির বস্তু) ক্লাস থেকে উদ্ভূত হয় না Truck। সব ট্রাকই গাড়ি, কিন্তু সব গাড়িই ট্রাক নয়। Carবস্তু ক্লাসের উপর ভিত্তি করে নয় Truck। আরও একটি উদাহরণ:

public static void main(String[] args) {

   Car car = new Car();
   Truck truck = new Truck();
   System.out.println(car instanceof Object && truck instanceof Object);
}
আউটপুট: True এখানে যুক্তিটিও সহজ: জাভাতে আপনার তৈরি করা ক্লাসগুলি সহ, ক্লাস থেকে নেমে আসে Object(যদিও আপনি "এক্সটেন্ডস অবজেক্ট" লেখেন না—এটি ইতিমধ্যেই উহ্য)। কিভাবে এবং কখন এটি দরকারী হবে? পদ্ধতিটি ওভাররাইড করার সময় অপারেটরটি instanceofসবচেয়ে বেশি ব্যবহৃত হয় equals()equalsউদাহরণস্বরূপ, ক্লাসে পদ্ধতিটি কীভাবে প্রয়োগ করা হয় তা এখানে String:

public boolean equals(Object anObject) {
   if (this == anObject) {
       return true;
   }
   if (anObject instanceof String) {
       String anotherString = (String) anObject;
       int n = value.length;
       if (n == anotherString.value.length) {
           char v1[] = value;
           char v2[] = anotherString.value;
           int i = 0;
           while (n-- != 0) {
               if (v1[i] != v2[i])
                       return false;
               i++;
           }
           return true;
       }
   }
   return false;
}
একটি পাস করা বস্তুর সাথে তুলনা করার আগে String, পদ্ধতিটি পরীক্ষা করে যে বস্তুটি এমনকি একটি স্ট্রিং কিনা? তবেই এটি দুটি বস্তুর বৈশিষ্ট্যের তুলনা শুরু করে। যদি এই পরীক্ষাটি বিদ্যমান না থাকে তবে মান এবং দৈর্ঘ্যের ক্ষেত্র সহ যেকোন বস্তুকে পদ্ধতিতে পাস করা যেতে পারে এবং একটি স্ট্রিংয়ের সাথে তুলনা করা যেতে পারে, যা অবশ্যই ভুল হবে।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION