জাভা ইনহেরিটেন্স বাংলায় - Inheritance in Java Bangla

জাভা ইনহেরিটেন্স বাংলায় - Inheritance in Java Bangla

জাভা ইনহেরিটেন্স কি  ? (What is inheritance)

জাভাতে ইনহেরিটেন্স খুবই গুরুত্বপূর্ণ বিষয়। যখন কোনো ক্লাস আরেকটি ক্লাসের বৈশিষ্ট অর্জন করে তখন তাকে জাভা ইনহেরিটেন্স (JAVA Inheritance) বলে। ইনহেরিটেন্স প্রোগ্রামকে ছোট করে এবং প্রোগ্রাম একবার লেখেই বার বার ব্যবহার করা যায়। 
  • Inheritance in Java: When we construct a new class from an existing class in search of a way that the new class to access all the features and properties of the existing class called inheritance.

জাভা ইনহেরিটেন্স বুঝার আগে নিচের গুরুত্বপূর্ণ বিষয় ভালো করে লক্ষ্য করি : 
  • জাভাতে ইনহেরিটেন্স ব্যবহার করতে চাইলে extends কীওয়ার্ড প্রয়োগ করতে হয়।  
  • ইনহেরিটেন্স, প্রোগ্রাম কোডকে পুনরায় ব্যবহারযোগ্য করে তুলে। 
  • ইনহেরিটেন্সে সুপার ক্লাস অথবা পেরেন্টস ক্লাসের সকল বৈশিষ্ট সাব ক্লাস অথবা চাইল্ড ক্লাসে আসলেও, সুপার ক্লাস অথবা পেরেন্টস ক্লাসের প্রাইভেট মেম্বার গুলোকে সাব ক্লাস অথবা চাইল্ড ক্লাস ব্যবহার করতে পারে না। 
  • যেহুতো ইনহেরিটেন্সে সুপার ক্লাস অথবা পেরেন্টস ক্লাসের সকল বৈশিষ্ট সাব ক্লাস অথবা চাইল্ড ক্লাস পাই তাই অবশ্যই অবজেক্ট সাব ক্লাস অথবা চাইল্ড ক্লাসের বানাতে হবে। 
  • শুধুমাত্র মেথড ওভারব্রীডিং আর মাধ্যমেই ইনহেরিটেন্স তৈরী করা সম্ভব। 

জাভাতে ইনহেরিটেন্স চার ভাগে ভাগ করা হয়েছে : (Types of inheritance in Java)

  • একক / সাধারণ ইনহেরিটেন্সে (Single/simple Inheritance)
  • মাল্টি-লেভেল ইনহেরিটেন্স (Multi-Level Inheritance)
  • একাধিক ইনহেরিটেন্স (Multiple Inheritance)
  • অনুক্রমিক ইনহেরিটেন্স (Hierarchical Inheritance)

একক / সাধারণ ইনহেরিটেন্সে (Single/simple Inheritance - Single inheritance in Java):

যখন একটি মাত্র সুপার ক্লাস ও একটি মাত্র সাব ক্লাস থাকে এবং সুপার ক্লাসের সকল বৈশিষ্ট extends কিওয়ার্ড দ্বারা সাব ক্লাস অর্জন করে তখন তাকে, একক / সাধারণ ইনহেরিটেন্সে (Single/simple Inheritance) বলে। 
  • Simple inheritance nothing but which contains only one superclass only one subclass is called simple inheritance.


উপরের চিত্রে ধরি সুপার ক্লাসে ৪ টি আম ও সাব ক্লাসে ৩ টি আম রয়েছে  এবং যদি সাব ক্লাস তখন extends কিওয়ার্ড দ্বারা সুপার ক্লাসের সকল বৈশিষ্ট নিজের করে নেয়, তাহলে সাব ক্লাসের সর্বমোট ৭ টি আম থাকবে।
 

class student //Super class

{
    int roll, marks;
    String name;
          void input()
          {
              System.out.println("Enter Your Roll Marks and Name ");
          }
   // private int id=4546; //can't use in sub class

}


public class fahim extends student //Sub class
{
    void show()
    {
        roll=24;
        marks=75;
        name="Fahim ullah";
    System.out.println("Roll is = "+roll+" Marks= " +marks+" and Name= 

"+name);  
    }
    public static void main(String[] args) {
       fahim f=new fahim();
       f.input();
       f.show();
     //System.out.println(id); //can't use this in sub class
      
    }
    
}


মাল্টি-লেভেল ইনহেরিটেন্স (Multilevel inheritance in Java):

যখন একটি মাত্র সুপার ক্লাস ও একাধিক সাব ক্লাস থাকে এবং সুপার ক্লাসের সকল বৈশিষ্ট extends কিওয়ার্ড দ্বারা প্রথম সাব ক্লাস অর্জন করে ও দ্বিতীয় সাব ক্লাসটি প্রথম সাব ক্লাসের সকল বৈশিষ্ট extends কিওয়ার্ড দ্বারা অর্জন করে এরপর তৃতীয় সাব ক্লাসটি দ্বিতীয় সাব ক্লাসের সকল বৈশিষ্ট extends কিওয়ার্ড দ্বারা অর্জন করে এভাবে ধারাবাহিকতা ভাবে থাকলে তখন তাকে, মাল্টি-লেভেল ইনহেরিটেন্স (Multi-Level Inheritance) বলে।
  • In multilevel inheritance, we have only one superclass and multiple subclasses called multilevel inheritance.



class substrution 
{
    int x,y,z;
    void add()
    {
    x=20; y=30;
    z=x+y;
    System.out.println("Sum is "+z);
    }    
}
class multi extends substrution
{
    void mul()
    {
        x=4;y=5;
        z=x*y;
       System.out.println("Multiply is "+z);  
    }
}
class divistion extends multi
{
    void div()
    {
        x=10;y=2;
        z=x/y;
       System.out.println("Divistion is "+z);  
    }
}

public class result {
   
    public static void main(String[] args)
    {
        divistion res=new divistion();
        res.add();
        res.mul();
        res.div();
    }
    
}


 

একাধিক ইনহেরিটেন্স (Multiple Inheritance in Java):

যখন একাধিক সুপার ক্লাসের বৈশিষ্ট একটি সাব ক্লাস গ্রহণ করে তখন তাকে একাধিক ইনহেরিটেন্স (Multiple Inheritance) বলে। জাভাতে মাল্টিপল ইনহেরিটেন্স ক্লাস অনুযায়ী ব্যবহার করা যায় না। কারণ ধরুন একটি সুপার ক্লাসে sum নামে একটি মেথড রয়েছে এবং আরেকটি সুপার ক্লাসে একই নামে sum মেথড রয়েছে। এখন যদি সাব ক্লাস থেকে sum মেথডকে কল করা হয় তাহলে সে কোন সুপার ক্লাসের মেথডকে সে কল করবে? তখন প্রোগ্রামে এম্বিগুয়াস সৃষ্টি হয় তাই এই সমস্যা দূর করতে ক্লাস দিয়ে ইনহেরিটেন্স তৈরী না করে ইন্টারফেস ধারা ইনহেরিটেন্স তৈরী করা হয়। কারণ আমরা জানি ইন্টারফেসে শুধুমাত্র অ্যাবস্ট্রাক্ট মেথড থাকে এবং ইন্টারফেসের বাস্তবায়ন সাব ক্লাসে করা হয়।  
  • Qus: Multiple inheritance using the interface? 
  • we can achieve Multiple inheritance through interface because interface contains only abstract method, which implementation is provided by the subclass.



interface A
    {
    void out(); //absstract+public
    }
interface B
    {
    void out(); //absstract+public
    }

public class finish implements A,B{
    
    @Override
    public void out()
    {
        System.out.println("Multilabele inh...");
    }
    public static void main(String[] args)
    {
       finish f=new finish();
       f.out();
    }
}


 

অনুক্রমিক ইনহেরিটেন্স (Hierarchical inheritance in Java):

যখন একটি মাত্র সুপার ক্লাস থাকে ও একাধিক সাব ক্লাস থাকে এবং প্রত্যেকটি সাব ক্লাস সরাসরি extends কিওয়ার্ড দ্বারা সুপার ক্লাসের বৈশিষ্ট নিলে তখন তাকে অনুক্রমিক ইনহেরিটেন্স (Hierarchical Inheritance) বলে। 
  • AN inheritance that contains only one superclass and multiple sub-class and all sub-class directly extends superclass called Hierarchical Inheritance.



class student{
    void name()
    {
        System.out.println("Enter your name ?");    
    }     
}

class fahim extends student
{
    void mynameis()
    {
        System.out.println("my name is fahim");    
    }     
}

class rahim extends student
{
    void mynameis()
    {
        System.out.println("my name is rahim");    
    }     
}

class finish {
     public static void main(String[] args)
    {
        fahim fa=new fahim();
        rahim ra=new rahim();
        
        fa.name();
        fa.mynameis();
        
        ra.name();
        ra.mynameis();
    }
}