पाठ 21 / 38

एब्स्ट्रैक्ट क्लास व इंटरफ़ेस

एब्स्ट्रैक्ट क्लास और इंटरफ़ेस में चुनें, default मेथड से व्यवहार जोड़ें, और Comparable व Runnable जैसी क्षमताएँ मॉडल करें।

कौन-सा कब

इंटरफ़ेस शुद्ध कॉन्ट्रैक्ट है — कई लागू कर सकते हैं। एब्स्ट्रैक्ट क्लास स्टेट रख सकती है पर एक ही एक्सटेंड होती है।

default वाला इंटरफ़ेस

Java 8 से इंटरफ़ेस default मेथड बॉडी दे सकता है, इसलिए नया मेथड मौजूदा इम्प्लीमेंटर को नहीं तोड़ता।

interface Shape {
    double area();
    default String describe() {
        return "area = " + area();
    }
}
class Circle implements Shape {
    private final double r;
    Circle(double r) { this.r = r; }
    public double area() { return Math.PI * r * r; }
}

static व private इंटरफ़ेस मेथड

Java 8 से इंटरफ़ेस में static मेथड हो सकते हैं (इंटरफ़ेस पर सीधे बुलाए जाते हैं, जैसे Shape.unitCircle())। Java 9 से private मेथड default मेथड्स को हेल्पर कोड साझा करने देते हैं बिना इम्प्लीमेंटर को दिखाए।

interface Shape {
    double area();

    static Shape unitCircle() { return new Circle(1); }

    private String label() { return "Shape["; }
    default String describe() { return label() + area() + "]"; }
}