উত্তর:
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
আমি আপনাকে গতিশীল বাঁধাই, পলিমারফিজম এবং অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের সাধারণ উত্তরাধিকার নিয়ে আরও কিছু গবেষণা করার পরামর্শ দিচ্ছি
default
ইন্টারফেসগুলিতে পদ্ধতিগুলির জন্য আচরণের প্রয়োগের অনুমতি দেয় , সেই পদ্ধতিগুলির কাস্টম প্রয়োগকে alচ্ছিক করে তোলে। অতএব "আপনি কেবল পদ্ধতিগুলি নির্দিষ্ট করতে পারবেন তবে সেগুলি বাস্তবায়ন করবেন না" বিবৃতি জাভা 7 এবং নীচের ক্ষেত্রে কেবল সম্পূর্ণ সঠিক ।
public interface ListIterator<E> extends Iterator<E>
আমি লক্ষ্য করি আপনার প্রোফাইলে আপনার কয়েকটি সি ++ টি প্রশ্ন রয়েছে। আপনি যদি সি ++ ( একাধিক শ্রেণীর বৈশিষ্ট্যগুলির অধীনে থাকা শ্রেণিগুলিকে উল্লেখ করে) থেকে একাধিক-উত্তরাধিকারের ধারণাটি বুঝতে পারেন তবে জাভা এটির অনুমতি দেয় না তবে এর কীওয়ার্ড রয়েছে interface
যা সি ++ তে খাঁটি ভার্চুয়াল শ্রেণির মতো। যেমন প্রচুর লোক দ্বারা উল্লিখিত হয়েছে, আপনি extend
একটি শ্রেণি (এবং আপনি কেবল একটি থেকে প্রসারিত করতে পারেন), এবং আপনি implement
একটি ইন্টারফেস - তবে আপনার শ্রেণি আপনার পছন্দ অনুযায়ী যতগুলি ইন্টারফেস প্রয়োগ করতে পারে।
অর্থাত্, এই কীওয়ার্ডগুলি এবং তাদের ব্যবহার নিয়ন্ত্রণকারী বিধিগুলি জাভাতে একাধিক-উত্তরাধিকারের সম্ভাবনাগুলি বর্ণনা করে (আপনার কেবলমাত্র একটি সুপার বর্গ থাকতে পারে তবে আপনি একাধিক ইন্টারফেস প্রয়োগ করতে পারেন)।
সাধারণত কার্যকরী একটি বাস্তবায়নের জন্য ব্যবহৃত ইন্টারফেস এবং প্রসারিত জন্য ব্যবহৃত এক্সটেনশন বেস বর্গ আচরণ বা এর বিমূর্ত বর্গ।
প্রসারিত : একটি উত্পন্ন শ্রেণি একটি বেস শ্রেণি প্রসারিত করতে পারে। আপনি একটি প্রতিষ্ঠিত সম্পর্কের আচরণটিকে নতুন করে সংজ্ঞায়িত করতে পারেন। উত্পন্ন শ্রেণি " একটি " বেস শ্রেণির ধরণ
প্রয়োগসমূহ : আপনি একটি চুক্তি বাস্তবায়ন করছেন। ইন্টারফেস প্রয়োগকারী শ্রেণীর " একটি " ক্ষমতা রয়েছে।
জাভা 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
গুরুত্বপূর্ণ বিষয়গুলি বুঝতে:
remember
() এবং protectOwner
() এ ভাগ name,lifeExpentency
করেAnimal
Cat
এবং Dog
এই সক্ষমতা প্রয়োগ করে।Think,Learn,Apply,Climb
এই উদাহরণগুলির মধ্যে দিয়ে আপনি বুঝতে পারবেন
আনলেক্টেড ক্লাসে ইন্টারফেসের মাধ্যমে ক্ষমতা থাকতে পারে তবে বেস ক্লাসগুলি বাড়ানোর মাধ্যমে সম্পর্কিত ক্লাসগুলি ওভাররাইড আচরণ করে।
extends
আপনি যখন বেস ক্লাস থেকে উত্তরাধিকারী হন (তখন এর কার্যকারিতা প্রসারিত করবেন) এর জন্য।
implements
যখন আপনি একটি রূপায়ণকারী করছি জন্য ইন্টারফেস ।
এখানে শুরু করার জন্য একটি ভাল জায়গা: ইন্টারফেস এবং উত্তরাধিকার ।
একজন class
শুধুমাত্র একটি "বাস্তবায়ন" করতে পারেন interface
। একটি শ্রেণি কেবল "প্রসারিত" ক class
। তেমনি, একটি interface
আরেকটি প্রসারিত করতে পারে interface
।
এ class
কেবল একটি অন্যকে প্রসারিত করতে পারে class
। এ class
বেশ কয়েকটি interface
এস প্রয়োগ করতে পারে ।
যদি এর পরিবর্তে আপনি কখন abstract class
এস এবং এস ব্যবহার করবেন তা জানতে আগ্রহী interface
হন তবে এই থ্রেডটি দেখুন: ইন্টারফেস বনাম অ্যাবস্ট্রাক্ট ক্লাস (সাধারণ ওও)
class
কেবল একটি কার্যকর করতে পারে interface
। এ আরও class
কয়েকটি ক্লাস প্রসারিত করতে পারে। আমি বিশ্বাস করি আপনি এটি পিছনের দিকে পেয়েছেন।
একটি ইন্টারফেস হ'ল কোনও পদক্ষেপটি করতে পারে এমন ক্রিয়াগুলির বর্ণনা ... উদাহরণস্বরূপ আপনি যখন হালকা স্যুইচটি ফ্লিপ করেন, আলোটি চলে যায়, আপনি কীভাবে যত্নশীল হন না, ঠিক কীভাবে তা করে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে, একটি ইন্টারফেস হ'ল একটি এক্স "হওয়ার জন্য কোনও বস্তুর অবশ্যই থাকা সমস্ত ফাংশনের বিবরণ। আবার, উদাহরণ হিসাবে, যে কোনও কিছু "হালকা পছন্দ করে" তার একটি টার্ন_ন () পদ্ধতি এবং একটি টার্নঅফ () পদ্ধতি থাকা উচিত। ইন্টারফেসগুলির উদ্দেশ্য হ'ল কম্পিউটারকে এই বৈশিষ্ট্যগুলি প্রয়োগ করার অনুমতি দেওয়া এবং এটি জানতে যে টিওয়াইপি টি এর কোনও বস্তুর (ইন্টারফেস যাই হোক না কেন) অবশ্যই এক্স, ওয়াই, জেড, ইত্যাদি নামক ফাংশন থাকতে হবে to
একটি ইন্টারফেস একটি প্রোগ্রামিং কাঠামো / বাক্য গঠন যা কম্পিউটারকে কোনও বস্তুর (শ্রেণি) নির্দিষ্ট বৈশিষ্ট্য প্রয়োগ করতে দেয়। উদাহরণস্বরূপ, বলুন আমাদের একটি গাড়ী ক্লাস এবং একটি স্কুটার ক্লাস এবং একটি ট্রাক শ্রেণি রয়েছে। এই তিনটি শ্রেণীর প্রত্যেকেরই একটি স্টার্ট_েনজিন () ক্রিয়া করা উচিত। প্রতিটি যানবাহনের জন্য কীভাবে "ইঞ্জিন শুরু করা হয়" তা প্রতিটি নির্দিষ্ট শ্রেণীর কাছে রেখে দেওয়া হয় তবে তাদের অবশ্যই একটি স্টার্ট_জেইন ক্রিয়া থাকতে হবে তা ইন্টারফেসের ডোমেন ।
প্রসারিত : এটি পিতামাত্ত শ্রেণীর বৈশিষ্ট্যগুলি বেস শ্রেণিতে পাওয়ার জন্য ব্যবহৃত হয় এবং এতে ইতিমধ্যে সংজ্ঞায়িত পদ্ধতি থাকতে পারে যা শিশু শ্রেণিতে ওভাররাইড করা যায়।
উপাদানসমূহ : শিশু শ্রেণিতে এটি সংজ্ঞায়িত করে একটি ইন্টারফেস (শুধুমাত্র ফাংশন স্বাক্ষরযুক্ত পিতাম শ্রেণীর সাথে তাদের সংজ্ঞা নয়) প্রয়োগ করতে ব্যবহৃত হয়।
একটি বিশেষ শর্ত রয়েছে: "যদি আমি একটি নতুন ইন্টারফেসটি বিদ্যমান ইন্টারফেসের সন্তান হতে চাই তবে কী হবে?" উপরের শর্তে, শিশু ইন্টারফেস প্যারেন্ট ইন্টারফেসটি প্রসারিত করে।
একটি বি বি প্রসারিত:
এ এবং বি উভয় শ্রেণি বা উভয় ইন্টারফেস
একটি বাস্তবায়ন খ
এ একটি শ্রেণি এবং বি একটি ইন্টারফেস
বাকি ক্ষেত্রে যেখানে এ একটি ইন্টারফেস এবং বি একটি শ্রেণি জাভাতে বৈধ নয়।
উপাদানগুলি ইন্টারফেসের জন্য ব্যবহৃত হয় এবং বর্ধিত করতে একটি শ্রেণি প্রসারিত করতে ব্যবহৃত হয়।
এটিকে আরও সহজ শর্তে আরও স্পষ্ট করার জন্য, একটি ইন্টারফেসটি শোনার মতো - একটি ইন্টারফেস - একটি মডেল, যা আপনার নিজের ধারণাগুলির সাথে এটি প্রয়োগ করতে, অনুসরণ করতে হবে।
ক্লাসগুলির জন্য প্রসারিত ব্যবহৃত হয়, আপনি এখানে আরও কার্যকারিতা যুক্ত করে ইতিমধ্যে বিদ্যমান এমন কিছু প্রসারিত করছেন।
আরও কয়েকটি নোট:
একটি ইন্টারফেস অন্য ইন্টারফেস প্রসারিত করতে পারে।
এবং যখন আপনাকে কোনও ইন্টারফেস বাস্তবায়ন করার বা কোনও নির্দিষ্ট দৃশ্যের জন্য কোনও শ্রেণি বাড়ানোর মধ্যে কোনওটি চয়ন করতে হবে, তখন একটি ইন্টারফেস বাস্তবায়নের জন্য যান। কারণ একটি শ্রেণি একাধিক ইন্টারফেস বাস্তবায়ন করতে পারে তবে কেবল একটি শ্রেণি প্রসারিত করতে পারে।
যখন একটি সাবক্লাস একটি শ্রেণি প্রসারিত করে, তখন এটি সাবক্লাসটি সুপারটাইপের মধ্যে সংজ্ঞাযুক্ত ওভাররাইড কোডকে উত্তরাধিকারী (পুনরায় ব্যবহার) এবং ওভাররাইডের অনুমতি দেয়। যখন কোনও শ্রেণি একটি ইন্টারফেস প্রয়োগ করে, শ্রেণি থেকে তৈরি কোনও বস্তু ইন্টারফেসের মান প্রত্যাশা করে এমন কোনও প্রসঙ্গে ব্যবহার করতে দেয়।
এখানে আসল ধরাটি হ'ল আমরা কোনও কিছু বাস্তবায়ন করার সময় এর অর্থ হ'ল আমরা সেগুলি যেমন ব্যবহার করি তেমনি ব্যবহার করছি। তাদের মান এবং রিটার্নের ধরণের পরিবর্তনের কোনও সুযোগ নেই।
তবে যখন আমরা কোনও কিছু প্রসারিত করি তখন তা আপনার শ্রেণীর একটি এক্সটেনশন হয়ে যায়। আপনি এটি পরিবর্তন করতে পারেন, এটি ব্যবহার করতে পারেন, এটি পুনরায় ব্যবহার করতে পারেন এবং এটি সুপারক্লাসের মতো একই মানগুলি ফেরত দেওয়ার প্রয়োজন হয় না।
আমরা ব্যবহার উপশ্রেণী প্রসারিত সুপারক্লাস শুধুমাত্র যখন উপশ্রেণী কিছু বৈশিষ্ট্য (পদ্ধতি বা দৃষ্টান্ত ভেরিয়েবল) যে ইতিমধ্যেই ঘোষিত হয় ব্যবহার করতে চায় সুপারক্লাস , অথবা আমি সামান্য কার্যকারিতা সংশোধন করতে চান তাহলে সুপারক্লাস (পদ্ধতি অগ্রাহ্য করা হবে)। কিন্তু বল, উদাহরণস্বরূপ আমি একজন প্রাণী শ্রেণী (আছে সুপারক্লাস ) এবং একটি কুকুর শ্রেণী ( উপশ্রেণী ) এবং সেখানে কয়েক পদ্ধতি যে আমি প্রাণী বর্গ যেমন সংজ্ঞায়িত করেছেন। 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();
}
উভয় কীওয়ার্ড জাভা ভাষায় আপনার নিজস্ব ক্লাস তৈরি করার সময় ব্যবহৃত হয়।
পার্থক্য: এর implements
অর্থ আপনি আপনার ক্লাসে জাভা ইন্টারফেসের উপাদান ব্যবহার করছেন। extends
এর অর্থ হ'ল আপনি যে শ্রেণীর শ্রেণিটি প্রসারিত করছেন তার একটি সাবক্লাস তৈরি করছেন। আপনি আপনার শিশু শ্রেণিতে কেবল একটি শ্রেণি বাড়িয়ে দিতে পারেন, তবে আপনি যতটা ইন্টারফেস আপনার পছন্দ মতো প্রয়োগ করতে পারেন।
আরও তথ্যের জন্য ইন্টারফেসে ওরাকল ডকুমেন্টেশন পৃষ্ঠাটি দেখুন।
এটি ইন্টারফেস কী এবং এটি ব্যবহারের চারপাশের সম্মেলনগুলি স্পষ্ট করতে সহায়তা করতে পারে।
সর্বাধিক সরল পদগুলিতে প্রসারগুলি ক্লাসের উত্তরাধিকারে ব্যবহৃত হয় এবং প্রয়োগগুলি আপনার ক্লাসে একটি ইন্টারফেস প্রয়োগ করতে ব্যবহৃত হয়
প্রসারিত :
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
ক্লাস এবং ইন্টারফেস উভয় চুক্তি । এগুলি প্রয়োগের অন্যান্য অংশগুলির উপর নির্ভর করে পদ্ধতি এবং বৈশিষ্ট্য সরবরাহ করে।
আপনি যখন এই চুক্তির প্রয়োগের বিবরণে আগ্রহী নন তখন আপনি একটি ইন্টারফেসটি সংজ্ঞায়িত করেন । যত্ন নেওয়ার একমাত্র বিষয় হ'ল চুক্তি (ইন্টারফেস) বিদ্যমান।
এক্ষেত্রে আপনি এটি ক্লাসে ছেড়ে দেন যা চুক্তিটি কীভাবে সম্পন্ন হয় তার বিশদ যত্ন নেওয়ার জন্য ইন্টারফেস প্রয়োগ করে। কেবল ক্লাসই ইন্টারফেস প্রয়োগ করতে পারে।
আপনি যখন কোনও বিদ্যমান চুক্তির বিশদ প্রতিস্থাপন করতে চান তখন প্রসারগুলি ব্যবহৃত হয়। এইভাবে আপনি চুক্তিটি সম্পূর্ণ করার জন্য একটি উপায়ে আলাদা উপায়ে প্রতিস্থাপন করেন। ক্লাসগুলি অন্যান্য ক্লাসগুলি প্রসারিত করতে পারে, এবং ইন্টারফেসগুলি অন্য ইন্টারফেসগুলি প্রসারিত করতে পারে।
Extends
আপনি যখন আপনার শিশু শ্রেণিতে / ইন্টারফেসে পিতামাত্ত শ্রেণি / ইন্টারফেসের বৈশিষ্ট্য চান তখন ব্যবহৃত হয় implements
বৈশিষ্ট্য চান ব্যবহৃত হয় যখন আপনি আপনার ক্লাসে একটি ইন্টারফেসের বৈশিষ্ট্য চান তখন ব্যবহৃত হয়।
উদাহরণ:
ক্লাস ব্যবহার করে প্রসারিত হয়
ক্লাস প্যারেন্ট {
}
ক্লাস চাইল্ড পিতামাতাকে প্রসারিত করে {
}
ইন্টারফেস ব্যবহার করে প্রসারিত
ইন্টারফেস প্যারেন্ট {
}
ইন্টারফেস শিশু পিতামাতার প্রসারিত {
}
সরঁজাম
ইন্টারফেস এ {
}
ক্লাস বি প্রয়োগ করে একটি {
}
প্রসারিত এবং সরঞ্জাম সংমিশ্রণ
interface A{
}
class B
{
}
class C implements A,extends B{
}
প্রসারিত
সরঁজাম
বিমূর্ত ক্লাসগুলি প্রসারিত এবং সরঞ্জাম সহ শ্রেণীর মতো কাজ করে
এই দুটি কীওয়ার্ড সরাসরি উত্তরাধিকারের সাথে সংযুক্ত রয়েছে এটি ওওপির একটি মূল ধারণা। যখন আমরা অন্য বর্গ আমরা ব্যবহার করতে পারি কিছু বর্গ উত্তরাধিকারী প্রসারিত কিন্তু যখন আমরা আমাদের ক্লাসে কিছু ইন্টারফেসগুলি উত্তরাধিকারী করতে যাচ্ছি আমরা ব্যবহার প্রসারিত করতে পারবে না আমরা ব্যবহার করা উচিত কার্যকরী এবং আমরা ব্যবহার করতে পারেন প্রসারিত অন্য ইন্টারফেস থেকে উত্তরাধিকারী ইন্টারফেসে ক্লিক করুন।