উপাদানগুলি বনাম প্রসারিত: কখন ব্যবহার করবেন? পার্থক্য কি?


719

অনুধাবন করুন ভাষা বোঝার জন্য সহজ কিছু ব্যাখ্যা বা কোনও নিবন্ধের লিঙ্কে।


9
লিঙ্ক এই উদাহরণটি ইন্টারফেস এবং বিমূর্ত শ্রেণীর সম্পর্কে সহজেই কিছু বোঝার তৈরি করেছে যা জাভা প্রয়োগ করে এবং প্রসারিত করে।
ব্যবহারকারী শেখা

উত্তর:


734

extendsএকটি বর্গ বাড়ানোর জন্য ।

implementsএকটি ইন্টারফেস বাস্তবায়নের জন্য

একটি ইন্টারফেস এবং একটি নিয়মিত শ্রেণীর মধ্যে পার্থক্য হ'ল একটি ইন্টারফেসে আপনি ঘোষিত কোনও পদ্ধতির প্রয়োগ করতে পারবেন না। ইন্টারফেসটি কেবল "ক্লাস করে" প্রয়োগ করে implement ইন্টারফেসের সি ++ সমতুল্য একটি বিমূর্ত শ্রেণি হবে (একেবারে একই নয় তবে বেশ অনেকটা)।

এছাড়াও জাভা ক্লাসগুলির জন্য একাধিক উত্তরাধিকার সমর্থন করে না । একাধিক ইন্টারফেস ব্যবহার করে এটি সমাধান করা হয়।

 public interface ExampleInterface {
    public void doAction();
    public String doThis(int number);
 }

 public class sub implements ExampleInterface {
     public void doAction() {
       //specify what must happen
     }

     public String doThis(int number) {
       //specfiy what must happen
     }
 }

এখন একটি ক্লাস প্রসারিত

 public class SuperClass {
    public int getNb() {
         //specify what must happen
        return 1;
     }

     public int getNb2() {
         //specify what must happen
        return 2;
     }
 }

 public class SubClass extends SuperClass {
      //you can override the implementation
      @Override
      public int getNb2() {
        return 3;
     }
 }

এক্ষেত্রে

  Subclass s = new SubClass();
  s.getNb(); //returns 1
  s.getNb2(); //returns 3

  SuperClass sup = new SuperClass();
  sup.getNb(); //returns 1
  sup.getNb2(); //returns 2

আমি আপনাকে গতিশীল বাঁধাই, পলিমারফিজম এবং অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের সাধারণ উত্তরাধিকার নিয়ে আরও কিছু গবেষণা করার পরামর্শ দিচ্ছি


46
একটি ইন্টারফেসে পদ্ধতির ঘোষণার চেয়ে আরও বেশি উপায় থাকতে পারে: ধ্রুবক ক্ষেত্র, টিকা, ইন্টারফেস এবং এমনকি ক্লাস।
ফিলিপ রিচার্ট

তারা কি রুবিতে মডিউল এবং মিশ্রণের মতো কিছু?
ব্যবহারকারী 2492854

@ user2492854 সামান্য বিট, কিন্তু একটি ইন্টারফেসে কোন প্রয়োগকৃত পদ্ধতি থাকবে না। এটি আক্ষরিক অর্থে একটি ইন্টারফেসের বর্ণনা, বাস্তবায়ন নয়।
রব গ্রান্ট

34
জাভা 8- এ একটি নতুন বৈশিষ্ট্য defaultইন্টারফেসগুলিতে পদ্ধতিগুলির জন্য আচরণের প্রয়োগের অনুমতি দেয় , সেই পদ্ধতিগুলির কাস্টম প্রয়োগকে alচ্ছিক করে তোলে। অতএব "আপনি কেবল পদ্ধতিগুলি নির্দিষ্ট করতে পারবেন তবে সেগুলি বাস্তবায়ন করবেন না" বিবৃতি জাভা 7 এবং নীচের ক্ষেত্রে কেবল সম্পূর্ণ সঠিক ।
এডিটিসি

5
"বর্ধিতকরণ একটি শ্রেণি বাড়ানোর জন্য", কিছুটা বিভ্রান্তিকর। একটি ইন্টারফেস সাইন করুন এবং একটি ইন্টারফেসও প্রসারিত করে । উদাহরণস্বরূপ:public interface ListIterator<E> extends Iterator<E>
ওয়েইহেং

77

আমি লক্ষ্য করি আপনার প্রোফাইলে আপনার কয়েকটি সি ++ টি প্রশ্ন রয়েছে। আপনি যদি সি ++ ( একাধিক শ্রেণীর বৈশিষ্ট্যগুলির অধীনে থাকা শ্রেণিগুলিকে উল্লেখ করে) থেকে একাধিক-উত্তরাধিকারের ধারণাটি বুঝতে পারেন তবে জাভা এটির অনুমতি দেয় না তবে এর কীওয়ার্ড রয়েছে interfaceযা সি ++ তে খাঁটি ভার্চুয়াল শ্রেণির মতো। যেমন প্রচুর লোক দ্বারা উল্লিখিত হয়েছে, আপনি extendএকটি শ্রেণি (এবং আপনি কেবল একটি থেকে প্রসারিত করতে পারেন), এবং আপনি implementএকটি ইন্টারফেস - তবে আপনার শ্রেণি আপনার পছন্দ অনুযায়ী যতগুলি ইন্টারফেস প্রয়োগ করতে পারে।

অর্থাত্, এই কীওয়ার্ডগুলি এবং তাদের ব্যবহার নিয়ন্ত্রণকারী বিধিগুলি জাভাতে একাধিক-উত্তরাধিকারের সম্ভাবনাগুলি বর্ণনা করে (আপনার কেবলমাত্র একটি সুপার বর্গ থাকতে পারে তবে আপনি একাধিক ইন্টারফেস প্রয়োগ করতে পারেন)।


51

সাধারণত কার্যকরী একটি বাস্তবায়নের জন্য ব্যবহৃত ইন্টারফেস এবং প্রসারিত জন্য ব্যবহৃত এক্সটেনশন বেস বর্গ আচরণ বা এর বিমূর্ত বর্গ।

প্রসারিত : একটি উত্পন্ন শ্রেণি একটি বেস শ্রেণি প্রসারিত করতে পারে। আপনি একটি প্রতিষ্ঠিত সম্পর্কের আচরণটিকে নতুন করে সংজ্ঞায়িত করতে পারেন। উত্পন্ন শ্রেণি " একটি " বেস শ্রেণির ধরণ

প্রয়োগসমূহ : আপনি একটি চুক্তি বাস্তবায়ন করছেন। ইন্টারফেস প্রয়োগকারী শ্রেণীর " একটি " ক্ষমতা রয়েছে।

জাভা 8 রিলিজের সাথে, ইন্টারফেসের ইন্টারফেসে ডিফল্ট পদ্ধতি থাকতে পারে যা ইন্টারফেসে নিজেই বাস্তবায়ন সরবরাহ করে।

তাদের প্রত্যেকটি কখন ব্যবহার করবেন এই প্রশ্নের জন্য দেখুন:

ইন্টারফেস বনাম বিমূর্ত শ্রেণি (সাধারণ ওও)

জিনিস বোঝার উদাহরণ।

public class ExtendsAndImplementsDemo{
    public static void main(String args[]){

        Dog dog = new Dog("Tiger",16);
        Cat cat = new Cat("July",20);

        System.out.println("Dog:"+dog);
        System.out.println("Cat:"+cat);

        dog.remember();
        dog.protectOwner();
        Learn dl = dog;
        dl.learn();

        cat.remember();
        cat.protectOwner();

        Climb c = cat;
        c.climb();

        Man man = new Man("Ravindra",40);
        System.out.println(man);

        Climb cm = man;
        cm.climb();
        Think t = man;
        t.think();
        Learn l = man;
        l.learn();
        Apply a = man;
        a.apply();

    }
}

abstract class Animal{
    String name;
    int lifeExpentency;
    public Animal(String name,int lifeExpentency ){
        this.name = name;
        this.lifeExpentency=lifeExpentency;
    }
    public void remember(){
        System.out.println("Define your own remember");
    }
    public void protectOwner(){
        System.out.println("Define your own protectOwner");
    }

    public String toString(){
        return this.getClass().getSimpleName()+":"+name+":"+lifeExpentency;
    }
}
class Dog extends Animal implements Learn{

    public Dog(String name,int age){
        super(name,age);
    }
    public void remember(){
        System.out.println(this.getClass().getSimpleName()+" can remember for 5 minutes");
    }
    public void protectOwner(){
        System.out.println(this.getClass().getSimpleName()+ " will protect owner");
    }
    public void learn(){
        System.out.println(this.getClass().getSimpleName()+ " can learn:");
    }
}
class Cat extends Animal implements Climb {
    public Cat(String name,int age){
        super(name,age);
    }
    public void remember(){
        System.out.println(this.getClass().getSimpleName() + " can remember for 16 hours");
    }
    public void protectOwner(){
        System.out.println(this.getClass().getSimpleName()+ " won't protect owner");
    }
    public void climb(){
        System.out.println(this.getClass().getSimpleName()+ " can climb");
    }
}
interface Climb{
    public void climb();
}
interface Think {
    public void think();
}

interface Learn {
    public void learn();
}
interface Apply{
    public void apply();
}

class Man implements Think,Learn,Apply,Climb{
    String name;
    int age;

    public Man(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void think(){
        System.out.println("I can think:"+this.getClass().getSimpleName());
    }
    public void learn(){
        System.out.println("I can learn:"+this.getClass().getSimpleName());
    }
    public void apply(){
        System.out.println("I can apply:"+this.getClass().getSimpleName());
    }
    public void climb(){
        System.out.println("I can climb:"+this.getClass().getSimpleName());
    }
    public String toString(){
        return "Man :"+name+":Age:"+age;
    }
}

আউটপুট:

Dog:Dog:Tiger:16
Cat:Cat:July:20
Dog can remember for 5 minutes
Dog will protect owner
Dog can learn:
Cat can remember for 16 hours
Cat won't protect owner
Cat can climb
Man :Ravindra:Age:40
I can climb:Man
I can think:Man
I can learn:Man
I can apply:Man

গুরুত্বপূর্ণ বিষয়গুলি বুঝতে:

  1. কুকুর এবং বিড়াল প্রাণী এবং তারা ভাগ করে remember() এবং protectOwner() এ ভাগ name,lifeExpentencyকরেAnimal
  2. বিড়াল আরোহণ করতে পারে () তবে কুকুর তা পায় না। কুকুর ভাবতে পারে () তবে বিড়াল তা মনে করে না । এই সক্ষমতা প্রয়োগ করে Catএবং Dogএই সক্ষমতা প্রয়োগ করে।
  3. মানুষ কোনও প্রাণী নয় তবে সে পারে Think,Learn,Apply,Climb

এই উদাহরণগুলির মধ্যে দিয়ে আপনি বুঝতে পারবেন

আনলেক্টেড ক্লাসে ইন্টারফেসের মাধ্যমে ক্ষমতা থাকতে পারে তবে বেস ক্লাসগুলি বাড়ানোর মাধ্যমে সম্পর্কিত ক্লাসগুলি ওভাররাইড আচরণ করে।


1
খুব ভাল ব্যাখ্যা করা হয়েছে। এটি সবেমাত্র ক্লিক করেছে। একটি গুচ্ছ ধন্যবাদ!
আমির মেমিক

আসলেই কি তাই? আমি সবসময় ভেবেছিলাম "আছে" বলতে কিছু থাকার, এটি অধিকারকে বোঝায়। আপনি বলতে পারেন যে বিড়ালটির "আরোহণের ক্ষমতা" রয়েছে তবে আমি বলতে চাই যে আপনার উদাহরণটি বদলে নেওয়া উচিত। বিড়াল "একটি" পর্বতারোহী ", মানুষ" হলেন "" চিন্তাবিদ, শিক্ষণার্থী, লতা "। যেহেতু মানুষ" একজন "চিন্তাবিদ, তাই তিনি একজন চিন্তাবিদ যা করতে পারেন তা করতে পারেন can কিছু প্রোটোকলের সাথে কাজ করার সময় এটি আরও পরিষ্কার হয় - আপনি যদি একটি ঘর আছে, এটি একটি দরজা আছে, কিন্তু এটি পুশিং হ্যান্ডল বাস্তবায়ন করে না It এটি "একটি" ম্যাটারিয়ালঅবজেক্ট, এর অর্থ এটি মহাকর্ষ মান্য করার জন্য ইন্টারফেস প্রয়োগ করে; এটির "গ্র্যাভিটিঅবাইজিং স্কিল" বা অনুরূপ কিছু নেই
ম্যাথিউরক

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

@ রবীন্দ্রবাবু এই জাতীয় স্পষ্ট ব্যাখ্যার জন্য অনেক ধন্যবাদ।
কানুদো

1
দুর্দান্ত ব্যাখ্যা!
Dary

43

extendsআপনি যখন বেস ক্লাস থেকে উত্তরাধিকারী হন (তখন এর কার্যকারিতা প্রসারিত করবেন) এর জন্য।

implementsযখন আপনি একটি রূপায়ণকারী করছি জন্য ইন্টারফেস

এখানে শুরু করার জন্য একটি ভাল জায়গা: ইন্টারফেস এবং উত্তরাধিকার


24
আপনি যখন একটি ইন্টারফেস :-) প্রসারিত করছেন তখন এর জন্যও প্রসারিত।
মার্ক পিটারস

34

একজন classশুধুমাত্র একটি "বাস্তবায়ন" করতে পারেন interface। একটি শ্রেণি কেবল "প্রসারিত" ক class। তেমনি, একটি interfaceআরেকটি প্রসারিত করতে পারে interface

classকেবল একটি অন্যকে প্রসারিত করতে পারে class। এ classবেশ কয়েকটি interfaceএস প্রয়োগ করতে পারে ।

যদি এর পরিবর্তে আপনি কখন abstract classএস এবং এস ব্যবহার করবেন তা জানতে আগ্রহী interfaceহন তবে এই থ্রেডটি দেখুন: ইন্টারফেস বনাম অ্যাবস্ট্রাক্ট ক্লাস (সাধারণ ওও)


2
আপনি একটি ইন্টারফেস প্রসারিত করতে পারেন।
মার্ক পিটারস

2
classকেবল একটি কার্যকর করতে পারে interface। এ আরও classকয়েকটি ক্লাস প্রসারিত করতে পারে। আমি বিশ্বাস করি আপনি এটি পিছনের দিকে পেয়েছেন।
pb2q

কেবল pb2q দ্বারা মন্তব্যটি স্পষ্ট করতে উত্তরটি ইতিমধ্যে সম্পাদিত / সংশোধন করা হয়েছে। "একটি শ্রেণি কেবল একটি অন্য শ্রেণিকে প্রসারিত করতে পারে A একটি শ্রেণি বিভিন্ন ইন্টারফেস প্রয়োগ করতে পারে" সঠিক বিবৃতি।
উইসবাকী

29

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

একটি ইন্টারফেস একটি প্রোগ্রামিং কাঠামো / বাক্য গঠন যা কম্পিউটারকে কোনও বস্তুর (শ্রেণি) নির্দিষ্ট বৈশিষ্ট্য প্রয়োগ করতে দেয়। উদাহরণস্বরূপ, বলুন আমাদের একটি গাড়ী ক্লাস এবং একটি স্কুটার ক্লাস এবং একটি ট্রাক শ্রেণি রয়েছে। এই তিনটি শ্রেণীর প্রত্যেকেরই একটি স্টার্ট_েনজিন () ক্রিয়া করা উচিত। প্রতিটি যানবাহনের জন্য কীভাবে "ইঞ্জিন শুরু করা হয়" তা প্রতিটি নির্দিষ্ট শ্রেণীর কাছে রেখে দেওয়া হয় তবে তাদের অবশ্যই একটি স্টার্ট_জেইন ক্রিয়া থাকতে হবে তা ইন্টারফেসের ডোমেন ।


4
দুর্দান্ত ব্যাখ্যা; আরও স্বীকৃতি প্রাপ্য।
অরবিন্দ মণি

22

নীচের বর্ণিত চিত্রটিতে যেমন দেখানো হয়েছে, একটি শ্রেণি অন্য শ্রেণিকে প্রসারিত করে, একটি ইন্টারফেস অন্য ইন্টারফেসকে প্রসারিত করে তবে একটি শ্রেণি একটি ইন্টারফেস প্রয়োগ করে। এখানে চিত্র বর্ণনা লিখুন

আরও বিশদ জন্য


16

প্রসারিত : এটি পিতামাত্ত শ্রেণীর বৈশিষ্ট্যগুলি বেস শ্রেণিতে পাওয়ার জন্য ব্যবহৃত হয় এবং এতে ইতিমধ্যে সংজ্ঞায়িত পদ্ধতি থাকতে পারে যা শিশু শ্রেণিতে ওভাররাইড করা যায়।

উপাদানসমূহ : শিশু শ্রেণিতে এটি সংজ্ঞায়িত করে একটি ইন্টারফেস (শুধুমাত্র ফাংশন স্বাক্ষরযুক্ত পিতাম শ্রেণীর সাথে তাদের সংজ্ঞা নয়) প্রয়োগ করতে ব্যবহৃত হয়।

একটি বিশেষ শর্ত রয়েছে: "যদি আমি একটি নতুন ইন্টারফেসটি বিদ্যমান ইন্টারফেসের সন্তান হতে চাই তবে কী হবে?" উপরের শর্তে, শিশু ইন্টারফেস প্যারেন্ট ইন্টারফেসটি প্রসারিত করে।


15
  • একটি বি বি প্রসারিত:

    এ এবং বি উভয় শ্রেণি বা উভয় ইন্টারফেস

  • একটি বাস্তবায়ন খ

    এ একটি শ্রেণি এবং বি একটি ইন্টারফেস

  • বাকি ক্ষেত্রে যেখানে এ একটি ইন্টারফেস এবং বি একটি শ্রেণি জাভাতে বৈধ নয়।


12

উপাদানগুলি ইন্টারফেসের জন্য ব্যবহৃত হয় এবং বর্ধিত করতে একটি শ্রেণি প্রসারিত করতে ব্যবহৃত হয়।

এটিকে আরও সহজ শর্তে আরও স্পষ্ট করার জন্য, একটি ইন্টারফেসটি শোনার মতো - একটি ইন্টারফেস - একটি মডেল, যা আপনার নিজের ধারণাগুলির সাথে এটি প্রয়োগ করতে, অনুসরণ করতে হবে।

ক্লাসগুলির জন্য প্রসারিত ব্যবহৃত হয়, আপনি এখানে আরও কার্যকারিতা যুক্ত করে ইতিমধ্যে বিদ্যমান এমন কিছু প্রসারিত করছেন।

আরও কয়েকটি নোট:

একটি ইন্টারফেস অন্য ইন্টারফেস প্রসারিত করতে পারে।

এবং যখন আপনাকে কোনও ইন্টারফেস বাস্তবায়ন করার বা কোনও নির্দিষ্ট দৃশ্যের জন্য কোনও শ্রেণি বাড়ানোর মধ্যে কোনওটি চয়ন করতে হবে, তখন একটি ইন্টারফেস বাস্তবায়নের জন্য যান। কারণ একটি শ্রেণি একাধিক ইন্টারফেস বাস্তবায়ন করতে পারে তবে কেবল একটি শ্রেণি প্রসারিত করতে পারে।


7

যখন একটি সাবক্লাস একটি শ্রেণি প্রসারিত করে, তখন এটি সাবক্লাসটি সুপারটাইপের মধ্যে সংজ্ঞাযুক্ত ওভাররাইড কোডকে উত্তরাধিকারী (পুনরায় ব্যবহার) এবং ওভাররাইডের অনুমতি দেয়। যখন কোনও শ্রেণি একটি ইন্টারফেস প্রয়োগ করে, শ্রেণি থেকে তৈরি কোনও বস্তু ইন্টারফেসের মান প্রত্যাশা করে এমন কোনও প্রসঙ্গে ব্যবহার করতে দেয়।

এখানে আসল ধরাটি হ'ল আমরা কোনও কিছু বাস্তবায়ন করার সময় এর অর্থ হ'ল আমরা সেগুলি যেমন ব্যবহার করি তেমনি ব্যবহার করছি। তাদের মান এবং রিটার্নের ধরণের পরিবর্তনের কোনও সুযোগ নেই।

তবে যখন আমরা কোনও কিছু প্রসারিত করি তখন তা আপনার শ্রেণীর একটি এক্সটেনশন হয়ে যায়। আপনি এটি পরিবর্তন করতে পারেন, এটি ব্যবহার করতে পারেন, এটি পুনরায় ব্যবহার করতে পারেন এবং এটি সুপারক্লাসের মতো একই মানগুলি ফেরত দেওয়ার প্রয়োজন হয় না।


আমি আমার লেখা এই উত্তরটি 3 বছরেরও বেশি সময় পরে এখন সেপ্টেম্বর 19 এ পড়ছি I আমি শপথ করছি আমি কী ছিলে তা আমি বুঝতে সক্ষম হই না। আমি এখন আরও ভাল উত্তর লিখতে পারে। অদ্ভুত জিনিস.
নিখিল অরোরা

7

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

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

এখন, কল্পনা করুন, একদিন কিছু বিড়াল প্রেমী আমাদের কর্মক্ষেত্রে আসেন এবং তিনি পশুর শ্রেণির প্রসারিত করার চেষ্টা করেন (বিড়ালরাও খায় এবং ঘুমায়)। তিনি একটি ক্যাট অবজেক্ট তৈরি করেন এবং পদ্ধতিগুলি শুরু করেন।

তবে, বলুন, কেউ প্রাণী শ্রেণীর একটি বিষয় তৈরি করার চেষ্টা করে। আপনি বলতে পারেন যে একটি বিড়াল কীভাবে ঘুমায়, আপনি বলতে পারেন যে কুকুর কীভাবে খায়, আপনি বলতে পারেন কীভাবে একটি হাতি পান করে। তবে এটি প্রাণী শ্রেণীর কোনও বস্তু তৈরির কোনও মানে করে না sense কারণ এটি একটি টেম্পলেট এবং আমরা খাওয়ার কোনও সাধারণ উপায় চাই না।

সুতরাং পরিবর্তে, আমি একটি বিমূর্ত শ্রেণি তৈরি করতে পছন্দ করব যা কেউ তাত্পর্যপূর্ণ করতে পারে না তবে অন্যান্য শ্রেণীর টেম্পলেট হিসাবে ব্যবহার করা যেতে পারে।

সুতরাং উপসংহারে, ইন্টারফেস একটি বিমূর্ত শ্রেণি (একটি খাঁটি বিমূর্ত শ্রেণি) ছাড়া কিছুই নয় যা কোনও পদ্ধতি বাস্তবায়ন ছাড়া কেবল সংজ্ঞা (টেমপ্লেট) ধারণ করে। সুতরাং যে কেউ ইন্টারফেসটি প্রয়োগ করে কেবল তারা জানে যে তাদের কাছে doEat () এর টেম্পলেট রয়েছে ; এবং ডু স্লিপ (); তবে তাদের নিজস্ব doEat () সংজ্ঞায়িত করতে হবে ; এবং ডু স্লিপ (); পদ্ধতি তাদের প্রয়োজন অনুযায়ী।

আপনি কেবল তখনই প্রসারিত হন যখন আপনি সুপারক্লাসের কিছু অংশ পুনরায় ব্যবহার করতে চান (তবে মনে রাখবেন, আপনি সর্বদা আপনার প্রয়োজন অনুযায়ী আপনার সুপারক্লাসের পদ্ধতিগুলি ওভাররাইড করতে পারেন) এবং যখন আপনি টেমপ্লেটগুলি চান এবং আপনি সেগুলি নিজের দ্বারা সংজ্ঞায়িত করতে চান তখন প্রয়োগ করেন (আপনার প্রয়োজন অনুসারে)

আমি আপনার সাথে একটি কোডের টুকরো ভাগ করব: আপনি বিভিন্ন ইনপুটগুলির সাহায্যে চেষ্টা করে দেখুন ফলাফলগুলি দেখুন।

class AnimalClass {

public void doEat() {

    System.out.println("Animal Eating...");
}

public void sleep() {

    System.out.println("Animal Sleeping...");
}

}

public class Dog extends AnimalClass implements AnimalInterface, Herbi{

public static void main(String[] args) {

    AnimalInterface a = new Dog();
    Dog obj = new Dog();
    obj.doEat();
    a.eating();

    obj.eating();
    obj.herbiEating();
}

public void doEat() {
    System.out.println("Dog eating...");
}

@Override
public void eating() {

    System.out.println("Eating through an interface...");
    // TODO Auto-generated method stub

}

@Override
public void herbiEating() {

    System.out.println("Herbi eating through an interface...");
    // TODO Auto-generated method stub

}


}

সংজ্ঞায়িত ইন্টারফেস :

public interface AnimalInterface {

public void eating();

}


interface Herbi {

public void herbiEating();

}

7

উভয় কীওয়ার্ড জাভা ভাষায় আপনার নিজস্ব ক্লাস তৈরি করার সময় ব্যবহৃত হয়।

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

আরও তথ্যের জন্য ইন্টারফেসে ওরাকল ডকুমেন্টেশন পৃষ্ঠাটি দেখুন।

এটি ইন্টারফেস কী এবং এটি ব্যবহারের চারপাশের সম্মেলনগুলি স্পষ্ট করতে সহায়তা করতে পারে।


7

সর্বাধিক সরল পদগুলিতে প্রসারগুলি ক্লাসের উত্তরাধিকারে ব্যবহৃত হয় এবং প্রয়োগগুলি আপনার ক্লাসে একটি ইন্টারফেস প্রয়োগ করতে ব্যবহৃত হয়

প্রসারিত :

public class Bicycle {
    //properties and methods
}
public class MountainBike extends Bicycle {
    //new properties and methods
}

প্রয়োগসমূহ :

public interface Relatable {
    //stuff you want to put
}
public class RectanglePlus implements Relatable {
    //your class code
}

যদি আপনার এখনও বিভ্রান্তি থাকে তবে এটি পড়ুন: https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html https://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html


5

ক্লাস এবং ইন্টারফেস উভয় চুক্তি । এগুলি প্রয়োগের অন্যান্য অংশগুলির উপর নির্ভর করে পদ্ধতি এবং বৈশিষ্ট্য সরবরাহ করে।

আপনি যখন এই চুক্তির প্রয়োগের বিবরণে আগ্রহী নন তখন আপনি একটি ইন্টারফেসটি সংজ্ঞায়িত করেন । যত্ন নেওয়ার একমাত্র বিষয় হ'ল চুক্তি (ইন্টারফেস) বিদ্যমান।

এক্ষেত্রে আপনি এটি ক্লাসে ছেড়ে দেন যা চুক্তিটি কীভাবে সম্পন্ন হয় তার বিশদ যত্ন নেওয়ার জন্য ইন্টারফেস প্রয়োগ করে। কেবল ক্লাসই ইন্টারফেস প্রয়োগ করতে পারে।

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


3

Extends আপনি যখন আপনার শিশু শ্রেণিতে / ইন্টারফেসে পিতামাত্ত শ্রেণি / ইন্টারফেসের বৈশিষ্ট্য চান তখন ব্যবহৃত হয় implements বৈশিষ্ট্য চান ব্যবহৃত হয় যখন আপনি আপনার ক্লাসে একটি ইন্টারফেসের বৈশিষ্ট্য চান তখন ব্যবহৃত হয়।

উদাহরণ:

  1. ক্লাস ব্যবহার করে প্রসারিত হয়

    ক্লাস প্যারেন্ট {

    }

    ক্লাস চাইল্ড পিতামাতাকে প্রসারিত করে {

    }

  2. ইন্টারফেস ব্যবহার করে প্রসারিত

    ইন্টারফেস প্যারেন্ট {

    }

    ইন্টারফেস শিশু পিতামাতার প্রসারিত {

    }

  3. সরঁজাম

ইন্টারফেস এ {

}

ক্লাস বি প্রয়োগ করে একটি {

}

প্রসারিত এবং সরঞ্জাম সংমিশ্রণ

interface A{

}

class B

{

}

class C implements A,extends B{

}

2

প্রসারিত

  • ক্লাস কেবল একটি ক্লাস প্রসারিত
  • ইন্টারফেস এক বা একাধিক ইন্টারফেস প্রসারিত করে

সরঁজাম

  • শ্রেণি এক বা একাধিক ইন্টারফেস প্রয়োগ করে
  • ইন্টারফেস 'কিছুই করতে পারে না' কিছুই প্রয়োগ করে

বিমূর্ত ক্লাসগুলি প্রসারিত এবং সরঞ্জাম সহ শ্রেণীর মতো কাজ করে


0

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

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