ডিফল্ট ইন্টারফেস মেথড (Default Interface Methods)
ইন্টারফেসে সরাসরি মেথড ইমপ্লিমেন্টেশন যোগ করুন, যা বিহেভিওরের একাধিক ইনহেরিটেন্স (multiple inheritance) সক্ষম করে।
// Need abstract class to share behavior
public abstract class AbstractLogger {
public void log(String msg) {
System.out.println(
timestamp() + ": " + msg);
}
abstract String timestamp();
}
// Single inheritance only
public class FileLogger
extends AbstractLogger { ... }
public interface Logger {
default void log(String msg) {
IO.println(
timestamp() + ": " + msg);
}
String timestamp();
}
// Multiple interfaces allowed
public class FileLogger
implements Logger, Closeable { ... }
মাল্টিপল ইনহেরিটেন্স (Multiple Inheritance)
ক্লাসগুলো ডিফল্ট মেথড সহ একাধিক ইন্টারফেস ইমপ্লিমেন্ট করতে পারে, সিঙ্গেল অ্যাবস্ট্র্যাক্ট ক্লাস ইনহেরিটেন্সের বিপরীতে।
API ইভোলিউশন
বিদ্যমান ইমপ্লিমেন্টেশনগুলোকে ব্রেক না করেই ইন্টারফেসগুলোতে নতুন মেথড যোগ করা যায়।
কম্পোজেবল বিহেভিওর (Composable Behavior)
একাধিক ইন্টারফেস থেকে ক্যাপাবিলিটিগুলো অবাধে মিক্স এবং ম্যাচ করা যায়।
JDK 8 (মার্চ 2014) থেকে উপলব্ধ।
জাভা 8 এর আগে, সম্পর্কহীন ক্লাসগুলোর মধ্যে বিহেভিওর শেয়ার করার জন্য অ্যাবস্ট্র্যাক্ট ক্লাসের প্রয়োজন হতো, যা আপনাকে সিঙ্গেল ইনহেরিটেন্সে সীমাবদ্ধ রাখত। ডিফল্ট মেথডগুলো ইন্টারফেসকে মেথড ইমপ্লিমেন্টেশন (method implementations) প্রদান করতে দেয়, ফলে ক্লাসগুলো একাধিক ইন্টারফেস থেকে বিহেভিওর ইনহেরিট করতে পারে। এটি বিদ্যমান ইমপ্লিমেন্টেশনগুলোকে ব্রেক না করেই কালেকশন API (যেমন List.forEach, Map.getOrDefault) ইভল্ভ করার জন্য অপরিহার্য ছিল।