IS-A রিলেশনশিপ
IS-A বলতে বোঝায় - এই অবজেক্টটি ওই অবজেক্টের একটি টাইপ। নিচে দেখানো হলো extends কীওয়ার্ড কীভাবে ইনহেরিট্যান্স অর্জন করে।
public class Animal { }
public class Mammal extends Animal { }
public class Reptile extends Animal { }
public class Dog extends Mammal { }
এখন, যদি আমরা IS-A রিলেশনশিপ বিবেচনা করি, তবে আমরা বলতে পারি:
- Mammal IS-A Animal
- Reptile IS-A Animal
- Dog IS-A Mammal
- অতএব: Dog IS-A Animal ও
extends কীওয়ার্ডের ব্যবহার سے সাবক্লাসগুলো সুপারক্লাসের সব প্রোপার্টি ইনহেরিট করতে পারবে (প্রাইভেট প্রোপার্টি বাদে)।
আমরা instanceof অপারেটর ব্যবহার করে নিশ্চিত করতে পারি যে Mammal আসলে একটি Animal।
উদাহরণ
class Animal { }
class Mammal extends Animal { }
class Reptile extends Animal { }
public class Dog extends Mammal {
public static void main(String args[]) {
Animal a = new Animal();
Mammal m = new Mammal();
Dog d = new Dog();
System.out.println(m instanceof Animal);
System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
}
এটি নিচের ফলাফল দেবে:
আউটপুট
true
true
true
HAS-A রিলেশনশিপ
এই রিলেশনশিপগুলো মূলত ব্যবহারের ওপর ভিত্তি করে। এটি নির্ধারণ করে যে একটি নির্দিষ্ট ক্লাস HAS-A নির্দিষ্ট জিনিস। এই রিলেশনশিপ কোড ডুপ্লিকেশন এবং বাগ কমাতে সাহায্য করে।
একটি উদাহরণ দেখি:
উদাহরণ
public class Vehicle { }
public class Speed { }
public class Van extends Vehicle {
private Speed sp;
}
এটি দেখাচ্ছে যে Van ক্লাস HAS-A Speed। Speed জন্য আলাদা ক্লাস রাখায় আমাদের Van ক্লাসের ভিতরে স্পীড সংক্রান্ত সারা কোড রাখতে হয় না, যা Speed ক্লাসকে একাধিক অ্যাপ্লিকেশনে রি-ইউজ করতে সম্ভব করে তোলে।
অবজেক্ট-অরিয়েন্টেড ফিচারে, ইউজারদের চিন্তা করতে হয় না কোন অবজেক্ট আসলে কাজটি করছে। এটি অর্জন করতে, Van ক্লাস ইমপ্লিমেন্টেশন ডিটেইল ইউজারদের থেকে লুকিয়ে রাখে। সুতরাং, মূলত কী হয়: ইউজাররা Van ক্লাসকে একটি নির্দিষ্ট অ্যাকশন করতে বলবে এবং Van ক্লাস বা তো নিজে কাজটি করবে বা অন্য একটি ক্লাসকে কাজটি করার জন্য বলবে।