কোনও ইন্টারফেস জাভাতে একাধিক ইন্টারফেস প্রসারিত করতে পারে?


126

কোনও ইন্টারফেস জাভাতে একাধিক ইন্টারফেস প্রসারিত করতে পারে? এই কোডটি আমার আইডিইতে বৈধ বলে মনে হচ্ছে এবং এটি সংকলন করে:

interface Foo extends Runnable, Set, Comparator<String> { }

তবে আমি শুনেছি জাভাতে একাধিক উত্তরাধিকার অনুমোদিত নয়। ইন্টারফেসের জন্য কেন ব্যতিক্রম বলে মনে হচ্ছে?


3
কোন নিবন্ধ বলে যে এটি সম্ভব নয়? তারা হয় ভুল, অথবা আপনি তাদের ভুল বুঝেছেন এবং তারা ইন্টারফেসের চেয়ে ক্লাস সম্পর্কে কথা বলছেন।

7
এই প্রশ্নটি বিষয়বস্তু বলে মনে হচ্ছে কারণ এটি স্ব-গবেষণার মাধ্যমে সহজেই উত্তর দেওয়া যেতে পারে
জোসকে

4
@ স্টেফেনসি যদি তিনি বিরোধী নিবন্ধগুলি খুঁজে পান তবে তার সেগুলি পোস্ট করা উচিত। এইভাবে লোকেরা এই নিবন্ধগুলি পড়তে জানে না ...
তবে আমি

10
এই প্রশ্নের উত্তর আমার সময় বাঁচিয়েছে। আমি যুক্তি দিচ্ছি যে এটির একটি বৈধ প্রশ্ন হিসাবে মূল্য রয়েছে।
xdmoore

6
সহায়ক প্রশ্ন, আমি আমার আইডিই কিছু সতর্কতা ছুঁড়ে ফেলার আশা করে এটি করেছি, কিছুই না দেখে অবাক হয়েছি। সুতরাং আমি অজান্তে গুগলে অপের মতো একই প্রশ্নটি টাইপ করেছি যা আমাকে কয়েকটি উত্তর / নিশ্চিতকরণ সহ এই পৃষ্ঠায় নিয়ে গেছে
আর্থার

উত্তর:


170

হ্যাঁ, আপনি এটা করতে পারেন। একটি ইন্টারফেস একাধিক ইন্টারফেস প্রসারিত করতে পারে, এখানে প্রদর্শিত হিসাবে:

interface Maininterface extends inter1, inter2, inter3 {  
  // methods
}

একটি একক শ্রেণি একাধিক ইন্টারফেস প্রয়োগ করতে পারে। যদি দুটি ইন্টারফেসের একই নাম এবং স্বাক্ষর সংজ্ঞায়িত করার পদ্ধতি থাকে?

একটি জটিল বিষয় রয়েছে:

interface A {
    void test();
}

interface B {
    void test();
}

class C implements A, B {

    @Override
    public void test() {

    }     

}

তারপর একক বাস্তবায়ন উভয়ের জন্য কাজ করে :)।

আমার সম্পূর্ণ পোস্টটি এখানে পড়ুন:

http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html


@ রাহুলভাদান বিমূর্ত পদ্ধতিটি কি ডানদিকে ওভাররাইড করা উচিত?
সুরেশ আত্তা

13
আপনার যদি ইন্টারফেস এ void test()এবং ইন্টারফেস বি দিয়ে ইন্টারফেস থাকে boolean test()? (এটি কি হীরা সমস্যার চাচাত ভাই ?) __ চেষ্টা করে এবং বুদ্ধিমান জিনিসটি ঘটে: যদি ফেরতের ধরণ আলাদা হয় তবে অনুমতি দেওয়া হয় না।
ড্যানিয়েল

@ সুরসত্তা - তাহলে কি হবে? এটা উভয় কল ??
ফ্যাটি

4
একটি শ্রেণি 2 টি পদ্ধতিতে ভিন্ন স্বাক্ষরের সাথে একই স্বাক্ষরের অনুমতি দেয় না। stackoverflow.com/questions/16149285/…
নিনাহ ফাম

73

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

একটি শ্রেণি একাধিক ইন্টারফেস বাস্তবায়ন করতে পারে ।

তবে, একটি শ্রেণি কেবল একটি একক শ্রেণি বাড়িয়ে দিতে পারে ।

আপনি কীভাবে শব্দগুলি ব্যবহার করেন extendsএবং implementsকখন interfaceএবং সম্পর্কে কথা বলছেন তা যত্নবান class


8

একটি ইন্টারফেস জাভা একাধিক ইন্টারফেস প্রসারিত করতে পারে?

উত্তর: হ্যাঁ

জেএলএস অনুযায়ী

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


জেএলএস = "জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন" যা এই প্রশ্নগুলির অনুমোদনের উত্স।
হন্টভেরি লেভেন্তে

6

একাধিক উত্তরাধিকার প্রকার সম্পর্কে ওরাকল ডকুমেন্টেশন পৃষ্ঠা থেকে, আমরা এখানে সঠিক উত্তরটি খুঁজে পেতে পারি । এখানে আমাদের প্রথমে জাভাতে একাধিক উত্তরাধিকারের ধরনটি জানা উচিত: -

  1. রাষ্ট্রের একাধিক উত্তরাধিকার।
  2. বাস্তবায়নের একাধিক উত্তরাধিকার।
  3. একাধিক প্রকারের উত্তরাধিকার।

জাভা "রাষ্ট্রের একাধিক উত্তরাধিকারকে সমর্থন করে না, তবে এটি জাভা 8 রিলিজ এবং ইন্টারফেসের সাথে একাধিক উত্তরাধিকারসূত্রে ডিফল্ট পদ্ধতিতে প্রয়োগের একাধিক উত্তরাধিকারকে সমর্থন করে।

তারপরে এখানে "ডায়মন্ড সমস্যা" এবং জাভা কীভাবে এটি মোকাবেলা করার জন্য প্রশ্নটি উত্থাপিত হয়: -

  1. বাস্তবায়নের একাধিক উত্তরাধিকারের ক্ষেত্রে জাভা সংকলক সংকলন ত্রুটি দেয় এবং ব্যবহারকারীকে ইন্টারফেসের নাম উল্লেখ করে এটি ঠিক করতে বলে। উদাহরণ এখানে:

                interface A {
                    void method();
                }
    
                interface B extends A {
                    @Override
                    default void method() {
                        System.out.println("B");
                    }
                }
    
                interface C extends A { 
                    @Override
                    default void method() {
                        System.out.println("C");
                    }
                }
    
                interface D extends B, C {
    
                }
    

সুতরাং এখানে আমরা ত্রুটিটি পেয়ে যাব: - ইন্টারফেস ডি বি এবং সি ইন্টারফেস ডি প্রকার বি, সি প্রসারিত থেকে পদ্ধতি () এর সাথে সম্পর্কিত না হওয়া ডিফল্টের উত্তরাধিকারী হয়

আপনি এটি ঠিক করতে পারেন: -

interface D extends B, C {
                @Override
                default void method() {
                    B.super.method();
                }
            }
  1. এক ধরণের জাভা একাধিক উত্তরাধিকারে এটিকে অনুমতি দেয় কারণ ইন্টারফেসে পরিবর্তনীয় ক্ষেত্র নেই এবং কেবলমাত্র একটি বাস্তবায়ন শ্রেণীর অন্তর্ভুক্ত তাই জাভা কোনও সমস্যা দেয় না এবং এটি আপনাকে এটি করতে দেয়।

উপসংহারে আমরা বলতে পারি যে জাভা রাষ্ট্রের একাধিক উত্তরাধিকারকে সমর্থন করে না তবে এটি বাস্তবায়নের একাধিক উত্তরাধিকার এবং বিভিন্ন ধরণের একাধিক উত্তরাধিকারকে সমর্থন করে


1
আমি মনে করি এটি একটি আরও উপযুক্ত উত্তর এবং প্রশ্নের আরও স্পষ্ট করে। +1
কেতন জোশী

আপনাকে ধন্যবাদ @ কেতন জোশী এটি চালিয়ে যেতে অনেক অনুপ্রাণিত করে :)
শঙ্কর উপাধ্যায়

4

আপনি একাধিক প্রসারিত Interfacesকরতে পারেন তবে আপনি একাধিক প্রসারিত করতে পারবেন না classes

যে কারণে জাভাতে একাধিক ক্লাস প্রসার করা সম্ভব নয়, এটি সি ++ এর খারাপ অভিজ্ঞতা যেখানে এটি সম্ভব is

বহুগুণিত উত্তরাধিকারের বিকল্পটি হ'ল কোনও শ্রেণি একাধিক ইন্টারফেস প্রয়োগ করতে পারে (বা কোনও ইন্টারফেস একাধিক ইন্টারফেস প্রসারিত করতে পারে)


2

আমি মনে করি যে আপনার বিভ্রান্তি একাধিক উত্তরাধিকারের সাথে জড়িত, যাতে এটি করা খারাপ অভ্যাস এবং জাভাতে এটিও সম্ভব নয়। তবে জাভাতে একাধিক ইন্টারফেস প্রয়োগের অনুমতি রয়েছে এবং এটিও নিরাপদ।


2

একটি জাভা ক্লাস কেবলমাত্র একটি প্যারেন্ট ক্লাস বাড়িয়ে দিতে পারে। একাধিক উত্তরাধিকার অনুমোদিত নয়। ইন্টারফেসগুলি ক্লাস নয় তবে একটি ইন্টারফেস একাধিক প্যারেন্ট ইন্টারফেসকে প্রসারিত করতে পারে।

উদাহরণস্বরূপ, এখানে কটাক্ষপাত: http://www.tutorialspoint.com/java/java_interfaces.htm

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