java interface in - আমরা একটি ইন্টারফেস পদ্ধতি বাস্তবায়ন oververide করা উচিত?




8 Answers

যখনই সম্ভব @ververide ব্যবহার করা উচিত। এটি তৈরি করা থেকে সহজ ভুল প্রতিরোধ করে। উদাহরণ:

class C {
    @Override
    public boolean equals(SomeClass obj){
        // code ...
    }
}

এটি কম্পাইল হয় না কারণ এটি সঠিকভাবে public boolean equals(Object obj) ওভাররাইড না করে।

একই ইন্টারফেস বাস্তবায়নের জন্য ( শুধুমাত্র 1.6 এবং উপরে ) পদ্ধতিতে যেতে হবে অথবা একটি সুপার ক্লাসের পদ্ধতিকে ওভাররাইড করবে।

meaning abstract

@Override ইন্টারভারাইডের সাথে একটি ইন্টারফেস পদ্ধতি প্রয়োগ করার পদ্ধতিটি কি উচিত?

ওভার्राাইড টীকাটির জাভাডোক বলেছেন:

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

আমি মনে করি না যে একটি ইন্টারফেস টেকনিক্যালি একটি superclass হয়। অথবা এটা?

প্রশ্ন সম্পাদন




যদি এটি উপলভ্য হয় তবে আপনি সর্বদা @ @Override সাথে পদ্ধতিগুলি @Override করতে হবে।

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

equals(Object) বনাম equals(YourObject) উদাহরণ বিন্দুতে একটি আদর্শ কেস, তবে একই যুক্তি ইন্টারফেস বাস্তবায়নের জন্য তৈরি করা যেতে পারে।

আমি ইন্টারফেসের প্রয়োগকরণ পদ্ধতিগুলিকে টীকা দেওয়ার বাধ্যতামূলক কারণটি কল্পনা করতে চাই যে JDK 5 কম্পাইল ত্রুটি হিসাবে পতাকাঙ্কিত। যদি জেডিকে 6 এই টীকাটি বাধ্যতামূলক করে তোলে তবে এটি পিছনে সামঞ্জস্য বজায় থাকবে।

আমি ইক্লিপ্স ব্যবহারকারী নই, তবে অন্যান্য আইডিইএস (ইনন্টেলিজ) -এ, @ ওভার্রাইড এনটাইটেশনটি কেবলমাত্র জুডিকে 6+ প্রকল্প হিসাবে সেট করা হলে ইন্টারফেস পদ্ধতি বাস্তবায়নের সাথে যুক্ত করা হয়। আমি যে eclipse অনুরূপ কল্পনা করবে।

যাইহোক, আমি এই ব্যবহারের জন্য একটি ভিন্ন টীকা দেখতে পছন্দ করতাম, হয়তো একটি @Implements টীকা।




আপনি যদি ইন্টারফেস (তার সংকলন ত্রুটি) এ ঘোষিত পদ্ধতিটি বাস্তবায়ন করছেন তবে JDK 5.0 আপনাকে @ @Override ব্যবহার করার অনুমতি দেয় না, তবে JDK 6.0 এটির অনুমতি দেয়। সুতরাং আপনি আপনার প্রয়োজন অনুযায়ী আপনার প্রকল্প পছন্দ কনফিগার করতে পারেন।




এটা JDK সঙ্গে একটি সমস্যা নয়। ইক্লিপস হিলিওসে, এটি বাস্তবায়ন ইন্টারফেস পদ্ধতিগুলির জন্য @ ওভার্রাইড এনটাইটেশন, যাহাই যাই হোক না কেন JDK 5 বা 6। Eclipse গ্যালিলিওর জন্য, @ ওভার্রাইড টীকাটি অনুমোদিত নয়, যেটি JDK 5 বা 6।




যদি কোন কংক্রিট বর্গ একটি বিমূর্ত পদ্ধতিকে ওভাররাইড করছে না, তাহলে বাস্তবায়ন করার জন্য @Override ব্যবহার করে একটি খোলা ব্যাপার, যেহেতু কম্পাইলার আপনাকে অবিলম্বে যেকোন আনুমানিক পদ্ধতির বিষয়ে সতর্ক করবে। এই ক্ষেত্রে, একটি আর্গুমেন্ট তৈরি করা যেতে পারে যা এটি পঠনযোগ্যতা থেকে আটকাতে পারে - আপনার কোডটি পড়ার আরও বেশি কিছু এবং কিছুটা ডিগ্রি, এটি @Implement বলা হয় এবং @Implement নয়।




super.theOverridenMethod() সহ সমস্যাটি হল এটি আপনাকে মনে করে যে আপনি super.theOverridenMethod() পদ্ধতিটি কল করতে ভুলে গেছেন, যা খুব বিভ্রান্তিকর । এই স্ফটিক-পরিষ্কার করা উচিত। সম্ভবত জাভা এখানে ব্যবহার করা একটি @Interface অফার করা উচিত। ওহ ভাল, এখনো অন্য অর্ধ assed জাভা বিশেষত্ব ...




Java8 এ জাভাডোকটি পড়ার মাধ্যমে, আপনি ইন্টারফেস ওভার्राাইড ঘোষণার পরে নিম্নলিখিতটি খুঁজে পেতে পারেন:

যদি এই টীকাটির সাথে কোনও পদ্ধতিতে টীকা দেওয়া হয় তবে কমপ্লেক্সগুলির কমপক্ষে নিম্নোক্ত শর্তগুলির মধ্যে একটি হওয়া পর্যন্ত ত্রুটি বার্তা তৈরি করতে হবে:

  • পদ্ধতি supertype ঘোষণা একটি পদ্ধতি override বা বাস্তবায়ন করা হয়।
  • {@Linkplain অবজেক্ট} এ ঘোষিত যেকোনো পাবলিক পদ্ধতির সমতুল্য-সমতুল্য পদ্ধতির একটি স্বাক্ষর রয়েছে।

সুতরাং, অন্তত java8 তে, আপনার ইন্টারফেস পদ্ধতি বাস্তবায়নের জন্য @ ওভার্রাইড ব্যবহার করা উচিত।




যদি interface বাস্তবায়নকারী শ্রেণীটি একটি abstract শ্রেণী হয়, @Override বাস্তবায়নের জন্য কার্যকর হয় তা নিশ্চিত করার জন্য একটি interface পদ্ধতি; @Override ছাড়া একটি abstract শ্রেণিটি ঠিকঠাক সংকলন করবে, এমনকি যদি কার্যকর পদ্ধতির স্বাক্ষর interface ঘোষিত পদ্ধতিটির সাথে মেলে না। দ্বিধাহীন interface পদ্ধতি অনুপূরক হিসাবে থাকবে। @ জাও দ্বারা উদ্ধৃত জাভা ডক

পদ্ধতি supertype ঘোষণা একটি পদ্ধতি override বা বাস্তবায়ন করা হয়

স্পষ্টভাবে একটি abstract সুপার ক্লাস উল্লেখ করা হয়; একটি interface supertype বলা যাবে না। সুতরাং, @Override অকার্যকর এবং কংক্রিট ক্লাসগুলিতে interface পদ্ধতি বাস্তবায়নের জন্য @Override নয়।




Related