জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন মাধ্যমে অনুসন্ধান যখন উত্তর দিতে এই প্রশ্নের , আমি শিখেছি যে
কোনও শ্রেণি শুরুর আগে, এর সরাসরি সুপারক্লাস অবশ্যই শুরু করতে হবে, তবে শ্রেণি দ্বারা প্রয়োগ করা ইন্টারফেসগুলি আরম্ভ করা হয় না। একইভাবে, একটি ইন্টারফেসের সুপারিনটারফেসগুলি ইন্টারফেসটি শুরু করার আগে আরম্ভ করা হয় না।
আমার নিজের কৌতূহলের জন্য, আমি এটি চেষ্টা করেছিলাম এবং প্রত্যাশা অনুযায়ী, ইন্টারফেসটি InterfaceType
আরম্ভ করা হয়নি।
public class Example {
public static void main(String[] args) throws Exception {
InterfaceType foo = new InterfaceTypeImpl();
foo.method();
}
}
class InterfaceTypeImpl implements InterfaceType {
@Override
public void method() {
System.out.println("implemented method");
}
}
class ClassInitializer {
static {
System.out.println("static initializer");
}
}
interface InterfaceType {
public static final ClassInitializer init = new ClassInitializer();
public void method();
}
এই প্রোগ্রাম প্রিন্ট
implemented method
যাইহোক, যদি ইন্টারফেসটি কোনও default
পদ্ধতি ঘোষণা করে , তবে আরম্ভটি ঘটে। InterfaceType
হিসাবে দেওয়া ইন্টারফেস বিবেচনা করুন
interface InterfaceType {
public static final ClassInitializer init = new ClassInitializer();
public default void method() {
System.out.println("default method");
}
}
তারপরে উপরের একই প্রোগ্রামটি মুদ্রণ করবে
static initializer
implemented method
অন্য কথায়, static
ইন্টারফেসের ক্ষেত্রটি সূচনা করা হয় ( বিশদ ইনিশিয়ালাইজেশন পদ্ধতিতে পদক্ষেপ 9 ) এবং static
প্রারম্ভিক হওয়া ধরণের প্রাথমিককরণটি কার্যকর করা হয় exec এর অর্থ হল ইন্টারফেসটি আরম্ভ করা হয়েছিল।
এটি হওয়া উচিত তা বোঝাতে আমি জেএলএসে কিছুই খুঁজে পাইনি। আমাকে ভুল করবেন না, আমি বুঝতে পেরেছি যে বাস্তবায়নকারী শ্রেণি যদি পদ্ধতিটির জন্য বাস্তবায়ন সরবরাহ না করে তবে এটি ঘটতে হবে তবে তা যদি হয়? জাভা ভাষা নির্দিষ্টকরণ থেকে এই শর্তটি কি অনুপস্থিত, আমি কি কিছু মিস করেছি, বা আমি এটির ভুল ব্যাখ্যা করছি?