একটি ইন্টারফেস কেন অন্য ইন্টারফেস প্রয়োগ করতে পারে না?


104

আমি যা বলতে চাই তা হল:

interface B {...}

interface A extends B {...} // allowed  

interface A implements B {...} // not allowed

আমি এটা googled এবং আমি দেখেছি এই :

implementsইন্টারফেসের পদ্ধতিগুলির জন্য একটি প্রয়োগকরণ সংজ্ঞায়িত করে। তবে ইন্টারফেসের কোনও প্রয়োগ নেই তাই এটি সম্ভব নয়।

তবে ইন্টারফেসটি একটি 100% বিমূর্ত শ্রেণি, এবং একটি বিমূর্ত শ্রেণি তার পদ্ধতিগুলি প্রয়োগ না করে ইন্টারফেস (100% বিমূর্ত শ্রেণি) প্রয়োগ করতে পারে। "ইন্টারফেস" হিসাবে সংজ্ঞায়িত করার সময় সমস্যাটি কী?

বিস্তারিত,

interface A {
    void methodA();
}

abstract class B implements A {} // we may not implement methodA() but allowed

class C extends B {
   void methodA(){}
} 

interface B implements A {} // not allowed. 
//however, interface B = %100 abstract class B

উত্তর:


110

implementsবাস্তবায়ন মানে যখন বাস্তবায়ন interfaceকরার interfaceজন্য না প্রদানের জন্য কেবল ঘোষণা করা ।

একটি 100% abstract classকার্যত একটি সমতুল্য interfaceতবে আপনি যদি চান তবে এটি প্রয়োগও করতে পারে ( abstractএক্ষেত্রে এটি 100% থেকে যায় না), সুতরাং জেভিএমের দৃষ্টিকোণ থেকে তারা আলাদা জিনিস।

এছাড়াও 100% বিমূর্ত শ্রেণিতে সদস্য ভেরিয়েবলের যে কোনও অ্যাক্সেস যোগ্যতা থাকতে পারে, যেখানে একটি ইন্টারফেসে তারা স্পষ্টভাবে থাকে public static final


8
জাভা 8 হিসাবে, ইন্টারফেসের ডিফল্ট পদ্ধতি থাকতে পারে, সেগুলি সে ক্ষেত্রে অ্যাবস্ট্রাক্ট ক্লাসগুলির সাথে অনেক বেশি সাদৃশ্যপূর্ণ।
forresthopkinsa

4
শেষ বাক্যটির জন্য আপনাকে ধন্যবাদ!
তাও ঝাং

24

implementsমানে একটি আচরণ abstractপদ্ধতিগুলির জন্য সংজ্ঞায়িত করা হবে ( স্পষ্টভাবে বিমূর্ত শ্রেণি বাদে), আপনি প্রয়োগটি সংজ্ঞায়িত করেন।

extends এর অর্থ একটি আচরণ উত্তরাধিকারসূত্রে প্রাপ্ত।

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


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


4

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


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

2

তবে ইন্টারফেসটি 100% বিমূর্ত শ্রেণি এবং বিমূর্ত শ্রেণি তার পদ্ধতিগুলি প্রয়োগ না করে ইন্টারফেস (100% বিমূর্ত শ্রেণি) প্রয়োগ করতে পারে। "ইন্টারফেস" হিসাবে সংজ্ঞায়িত করার সময় সমস্যাটি কী?

এটি কেবল সম্মেলনের বিষয়। জাভা ভাষার লেখকরা সিদ্ধান্ত নিয়েছিলেন যে এই সম্পর্কটিকে বর্ণনা করার সর্বোত্তম উপায় "প্রসারিত", তাই আমরা সকলেই ব্যবহার করি।

সাধারণভাবে, যদিও একটি ইন্টারফেসটি "একটি 100% বিমূর্ত শ্রেণি", আমরা তাদের সম্পর্কে সেভাবে ভাবি না। আমরা সাধারণত ইন্টারফেসগুলি সম্পর্কে ক্লাসের পরিবর্তে নির্দিষ্ট কী পদ্ধতিগুলি প্রয়োগ করার প্রতিশ্রুতি হিসাবে ভাবি। এবং তাই আমরা ক্লাসের চেয়ে ইন্টারফেসের জন্য আলাদা আলাদা ভাষা ব্যবহার করি।

অন্যরা যেমন বলেছে, "প্রসারিত" ওভার "সরঞ্জামগুলি" বেছে নেওয়ার জন্য যথেষ্ট কারণ রয়েছে।


জী জনাব. এটা কনভেনশন এর বিষয়। অনেক লোক যুক্তিযুক্তভাবে সূর্যের মূল জাভা ভাষার সীমাবদ্ধতাগুলি ন্যায়সঙ্গত করার চেষ্টা করে , যখন এটি কেবল একটি ব্যক্তিগত দৃষ্টিকোণ। সংকলকটি যদি "প্রয়োগ" ইন্টারফেস যুক্ত করে থাকে তবে আমার ধারণা, একই লোকেরাও এটি ন্যায়সঙ্গত হতে পারে। :-)
ছোট সান্তি

1

আশা করি এটি আমার কলেজের সময় উফ (কোর জাভা) তে যা শিখেছি তা আপনাকে একটু সহায়তা করবে।

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

এখানে নীচে একটি উদাহরণ দেওয়া আছে, এটি আমার বোঝাপড়া এবং উফগুলিতে আমি কী শিখেছি।

interface ParentInterface{  
        void myMethod();  
}  

interface SubInterface extends ParentInterface{  
        void anotherMethod();  
}  

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

public interface Dog
{
    public boolean Barks();

    public boolean isGoldenRetriever();
}

এখন, কোনও শ্রেণি যদি এই ইন্টারফেসটি প্রয়োগ করে, তবে এটি দেখতে এটির মতো হবে:

public class SomeClass implements Dog
{
    public boolean Barks{
    // method definition here

    }

    public boolean isGoldenRetriever{
    // method definition here
    }
}

এবং যদি কোনও বিমূর্ত শ্রেণীর কিছু বিমূর্ত ফাংশন সংজ্ঞায়িত করা এবং ঘোষণা করা হয় এবং আপনি সেই ফাংশনটি সংজ্ঞায়িত করতে চান বা আপনি এই ফাংশনটি বাস্তবায়ন করতে বলতে পারেন তবে আপনি অনুমিত হন যে শ্রেণিটি প্রসারিত হবে কারণ কেবল বিমূর্ত শ্রেণিটিই বাড়ানো যেতে পারে। এখানে নীচে উদাহরণ।

public abstract class MyAbstractClass {

    public abstract void abstractMethod();
}

এখানে MyAbstractClass এর একটি উদাহরণ উপক্লাস রয়েছে:

public class MySubClass extends MyAbstractClass {

    public void abstractMethod() {
        System.out.println("My method implementation");
    }
}

0

ইন্টারফেস একটি বিমূর্ততার মতো যা কোনও কার্যকারিতা সরবরাহ করে না। সুতরাং এটি 'প্রয়োগ' করে না তবে অন্যান্য বিমূর্ততা বা ইন্টারফেসগুলি প্রসারিত করে।


-6

ইন্টারফেস হ'ল এমন শ্রেণি যা একটি বিমূর্ত পদ্ধতি ধারণ করে যা কোনও বস্তু তৈরি করতে পারে না ince যেহেতু ইন্টারফেসটি বস্তুটি তৈরি করতে পারে না এবং এটি একটি খাঁটি শ্রেণি নয়, এটি কার্যকর করার কোনও মূল্য নেই।

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