पाठ 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() + "]"; }
}