हां। हम Java में एब्स्ट्रैक्ट मेथड/क्लासेस बहुत आसानी से बना सकते हैं।
उदाहरण
एक एब्स्ट्रैक्ट क्लास बनाने के लिए, क्लास डिक्लेरेशन में class कीवर्ड से पहले abstract कीवर्ड का उपयोग करें।
/* File name : Employee.java */
public abstract class Employee {
private String name;
private String address;
private int number;
public Employee(String name, String address, int number) {
System.out.println("Constructing an Employee");
this.name = name;
this.address = address;
this.number = number;
}
public double computePay() {
System.out.println("Inside Employee computePay");
return 0.0;
}
public void mailCheck() {
System.out.println("Mailing a check to " + this.name + " " + this.address);
}
public String toString() {
return name + " " + address + " " + number;
}
public String getName() { return name; }
public String getAddress() { return address; }
public void setAddress(String newAddress) { address = newAddress; }
public int getNumber() { return number; }
}
आप देख सकते हैं कि एब्स्ट्रैक्ट मेथड्स को छोड़कर Employee क्लास Java में सामान्य क्लास के समान है। क्लास अब एब्स्ट्रैक्ट है, लेकिन इसमें अभी भी तीन फील्ड्स, सात मेथड्स, और एक कंस्ट्रक्टर है।
एब्स्ट्रैक्ट क्लास की मुख्य विशेषताएं
abstractकीवर्ड के साथ घोषित- इंस्टेंशिएट नहीं किया जा सकता (
new Employee()अवैध) - एब्स्ट्रैक्ट मेथड्स हो सकते हैं (बॉडी के बिना)
- कंक्रीट मेथड्स हो सकते हैं (कार्यान्वयन के साथ)
- इंस्टेंस वेरिएबल्स, कंस्ट्रक्टर्स, स्टेटिक मेंबर्स हो सकते हैं
- सबक्लास द्वारा एक्सटेंड किया जाना चाहिए
- सबक्लास को सभी एब्स्ट्रैक्ट मेथड्स इम्प्लीमेंट करने चाहिए (जब तक सबक्लास भी एब्स्ट्रैक्ट न हो)
एब्स्ट्रैक्ट मेथड
// एब्स्ट्रैक्ट मेथड - कोई बॉडी नहीं, सेमीकॉलन से समाप्त public abstract void computePay(); // या abstract double calculateBonus();
एब्स्ट्रैक्ट क्लास को इंस्टेंशिएट करने का प्रयास
/* File name : AbstractDemo.java */
public class AbstractDemo {
public static void main(String[] args) {
/* यह अनुमति नहीं है और त्रुटि देगा */
Employee e = new Employee("George W.", "Houston, TX", 43);
System.out.println("\n Call mailCheck using Employee reference--");
e.mailCheck();
}
}
कंपाइल त्रुटि
Employee.java:46: Employee is abstract; cannot be instantiated
Employee e = new Employee("George W.", "Houston, TX", 43);
^
1 error
सही उपयोग: सबक्लास बनाना
// कंक्रीट सबक्लास
public class SalariedEmployee extends Employee {
private double salary;
public SalariedEmployee(String name, String address, int number, double salary) {
super(name, address, number);
this.salary = salary;
}
@Override
public double computePay() {
System.out.println("Inside SalariedEmployee computePay");
return salary / 12; // मासिक वेतन
}
}
// उपयोग
public class TestEmployee {
public static void main(String[] args) {
// Employee e = new Employee(...); // ERROR
Employee e = new SalariedEmployee("John", "NYC", 101, 120000);
System.out.println("Monthly Pay: " + e.computePay()); // पॉलीमॉर्फिज्म
e.mailCheck();
}
}
एब्स्ट्रैक्ट क्लास vs इंटरफेस (त्वरित तुलना)
| विशेषता | एब्स्ट्रैक्ट क्लास | इंटरफेस (Java 8+) |
|---|---|---|
| एब्स्ट्रैक्ट मेथड्स | हां | हां |
| कंक्रीट मेथड्स | हां | हां (default/static) |
| इंस्टेंस फील्ड्स | हां | नहीं |
| कंस्ट्रक्टर | हां | नहीं |
| मल्टीपल इम्प्लीमेंटेशन | नहीं (single extends) | हां (multiple implements) |
| एक्सेस मॉडिफायर | कोई भी | public (डिफ़ॉल्ट) |
टेम्पलेट मेथड पैटर्न (एब्स्ट्रैक्ट क्लास का क्लासिक उपयोग)
abstract class DataProcessor {
// टेम्पलेट मेथड - फाइनल ताकि ओवरराइड न हो
public final void process() {
readData();
processData();
writeData();
}
// हुक मेथड्स - सबक्लास द्वारा इम्प्लीमेंट
protected abstract void readData();
protected abstract void processData();
protected abstract void writeData();
// वैकल्पिक हुक
protected void beforeProcess() {}
protected void afterProcess() {}
}
class CSVProcessor extends DataProcessor {
@Override
protected void readData() { /* CSV पढ़ें */ }
@Override
protected void processData() { /* प्रोसेस करें */ }
@Override
protected void writeData() { /* लिखें */ }
}
निष्कर्ष: एब्स्ट्रैक्ट क्लास सामान्य कोड/स्टेट साझा करने और टेम्पलेट लागू करने के लिए आधार प्रदान करती है। इसे इंस्टेंशिएट नहीं किया जा सकता लेकिन सबक्लास द्वारा एक्सटेंड किया जाता है जो एब्स्ट्रैक्ट मेथड्स को इम्प्लीमेंट करते हैं।