Java Academy · पाठ

Enums में Abstract Methods

हर constant का अलग व्यवहार

पाठ 2, कुल 4 में से13 चरण

Enums में Abstract Methods, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

प्रत्येक स्थिरांक का व्यवहार

कभी-कभी हर एनम स्थिरांक को केवल अलग डेटा नहीं, बल्कि अलग व्यवहार भी चाहिए होता है।

Java में आप एनम पर एक abstract मेथड घोषित कर सकते हैं और हर स्थिरांक के लिए उसे ओवरराइड कर सकते हैं। इसे स्थिरांक-विशिष्ट मेथड बॉडी पैटर्न कहते हैं।

public class Main {
    enum Operation {
        PLUS { public int apply(int a, int b) { return a + b; } },
        MINUS { public int apply(int a, int b) { return a - b; } };
        public abstract int apply(int a, int b);
    }
    public static void main(String[] args) {
        System.out.println(Operation.PLUS.apply(3, 4));
        System.out.println(Operation.MINUS.apply(10, 6));
    }
}

यह कैसे काम करता है

बॉडी वाले हर स्थिरांक को एनम की एक अनाम उपक्लास में बदल दिया जाता है।

abstract मेथड हर स्थिरांक को अपना कार्यान्वयन देने के लिए बाध्य करता है, इसलिए कंपाइलर पूर्णता की गारंटी देता है।

public class Main {
    enum Operation {
        TIMES { public int apply(int a, int b) { return a * b; } };
        public abstract int apply(int a, int b);
    }
    public static void main(String[] args) {
        // The constant is an instance of a generated subclass
        System.out.println(Operation.TIMES.getClass().getSimpleName().isEmpty()
            ? "anonymous subclass" : Operation.TIMES.apply(6, 7));
    }
}

एक पूर्ण कैलकुलेटर

चार अंकगणितीय ऑपरेशन स्थिरांकों के रूप में हैं और हर एक की अपनी apply बॉडी है।

public class Main {
    enum Operation {
        PLUS  { public double apply(double a, double b) { return a + b; } },
        MINUS { public double apply(double a, double b) { return a - b; } },
        TIMES { public double apply(double a, double b) { return a * b; } },
        DIVIDE{ public double apply(double a, double b) { return a / b; } };
        public abstract double apply(double a, double b);
    }
    public static void main(String[] args) {
        double x = 6, y = 3;
        for (Operation op : Operation.values()) {
            System.out.printf("%s -> %.1f%n", op, op.apply(x, y));
        }
    }
}

फ़ील्ड और व्यवहार का संयोजन

आप किसी फ़ील्ड (एक प्रतीक) को प्रत्येक स्थिरांक के अलग व्यवहार के साथ मिला सकते हैं। फ़ील्ड ऑपरेशन का लेबल देता है और मेथड उसे पूरा करता है।

public class Main {
    enum Operation {
        PLUS("+")  { public double apply(double a, double b) { return a + b; } },
        MINUS("-") { public double apply(double a, double b) { return a - b; } };
        private final String symbol;
        Operation(String symbol) { this.symbol = symbol; }
        public abstract double apply(double a, double b);
        @Override public String toString() { return symbol; }
    }
    public static void main(String[] args) {
        Operation op = Operation.PLUS;
        System.out.println("2 " + op + " 3 = " + op.apply(2, 3));
    }
}

switch क्यों नहीं?

आप एक ही switch में स्थिरांक के आधार पर apply का कार्यान्वयन कर सकते हैं, लेकिन abstract मेथड वाला तरीका अधिक सुरक्षित है।

बाद में यदि आप कोई स्थिरांक जोड़ते हैं, तो कंपाइलर आपको उसकी बॉडी देने के लिए बाध्य करेगा। switch नए मामले को चुपचाप छोड़ सकता है।

public class Main {
    enum Op {
        SQUARE { public int apply(int n) { return n * n; } },
        CUBE   { public int apply(int n) { return n * n * n; } };
        public abstract int apply(int n);
    }
    public static void main(String[] args) {
        System.out.println(Op.SQUARE.apply(5));
        System.out.println(Op.CUBE.apply(3));
    }
}

abstract के साथ ठोस मेथड

एक एनम abstract और ठोस, दोनों प्रकार के मेथड मिला सकता है। साझा तर्क ठोस मेथड में रखें और बदलने वाला तर्क abstract रखें।

public class Main {
    enum Shape {
        CIRCLE { public double area(double x) { return Math.PI * x * x; } },
        SQUARE { public double area(double x) { return x * x; } };
        public abstract double area(double x);
        public String report(double x) { return this + " area = " + area(x); }
    }
    public static void main(String[] args) {
        System.out.println(Shape.CIRCLE.report(2));
    }
}

रणनीति एनम

इसका एक उन्नत रूप रणनीति एनम है: स्थिरांक सीधे ओवरराइड करने के बजाय किसी नेस्टेड रणनीति एनम को कार्य सौंपते हैं।

यह तब उपयोगी है जब कई स्थिरांक समान व्यवहार साझा करते हों। यहाँ सप्ताह के कार्यदिवस और सप्ताहांत भुगतान की गणना में अलग हैं।

public class Main {
    enum PayType {
        WEEKDAY { int overtime(int mins) { return mins; } },
        WEEKEND { int overtime(int mins) { return mins * 2; } };
        abstract int overtime(int mins);
        int pay(int mins) { return mins + overtime(Math.max(0, mins - 480)); }
    }
    public static void main(String[] args) {
        System.out.println("Weekend pay: " + PayType.WEEKEND.pay(540));
    }
}

इंटरफ़ेस और बॉडी वाला एनम

अधिकतम बहुरूपता के लिए इंटरफ़ेस को स्थिरांक-विशिष्ट बॉडी के साथ मिलाएँ।

public class Main {
    interface Command { String run(); }
    enum Action implements Command {
        START { public String run() { return "starting..."; } },
        STOP  { public String run() { return "stopping..."; } };
    }
    public static void main(String[] args) {
        for (Action a : Action.values()) System.out.println(a.run());
    }
}

बॉडी से फ़ील्ड तक पहुँचना

स्थिरांक-विशिष्ट बॉडी उस स्थिरांक के अपने फ़ील्ड पढ़ सकती है, क्योंकि हर बॉडी उस इंस्टेंस के संदर्भ में चलती है।

public class Main {
    enum Tax {
        STANDARD(0.20) { double apply(double amt) { return amt * (1 + rate); } },
        REDUCED(0.05)  { double apply(double amt) { return amt * (1 + rate); } };
        protected final double rate;
        Tax(double rate) { this.rate = rate; }
        abstract double apply(double amt);
    }
    public static void main(String[] args) {
        System.out.printf("%.2f%n", Tax.STANDARD.apply(100));
    }
}

डिफ़ॉल्ट, फिर ओवरराइड

आप एनम बॉडी में एक ठोस डिफ़ॉल्ट दे सकते हैं और केवल उन स्थिरांकों के लिए उसे ओवरराइड कर सकते हैं जिनका व्यवहार अलग है।

public class Main {
    enum Notifier {
        EMAIL,
        SMS { String send(String m) { return "SMS: " + m; } };
        String send(String m) { return "EMAIL: " + m; }
    }
    public static void main(String[] args) {
        System.out.println(Notifier.EMAIL.send("hi"));
        System.out.println(Notifier.SMS.send("hi"));
    }
}

एक छोटी स्टेट मशीन

स्टेट मशीन में प्रत्येक स्थिरांक का व्यवहार विशेष रूप से प्रभावी होता है: हर स्टेट अपना संक्रमण जानता है।

public class Main {
    enum State {
        IDLE    { State next() { return RUNNING; } },
        RUNNING { State next() { return DONE; } },
        DONE    { State next() { return DONE; } };
        abstract State next();
    }
    public static void main(String[] args) {
        State s = State.IDLE;
        for (int i = 0; i < 3; i++) { System.out.println(s); s = s.next(); }
        System.out.println(s);
    }
}

त्वरित जाँच

abstract एनम मेथड के बारे में अपनी समझ जाँचें।

पुनरावलोकन

आपने प्रत्येक स्थिरांक का अलग व्यवहार सीखा:

  • एक abstract मेथड घोषित करें और हर स्थिरांक की बॉडी में उसे ओवरराइड करें।
  • हर स्थिरांक एक अनाम उपक्लास बन जाता है।
  • कंपाइलर पूर्णता लागू करता है, जो switch से बेहतर है।
  • समृद्ध एनम बनाने के लिए फ़ील्ड, ठोस डिफ़ॉल्ट और इंटरफ़ेस मिलाएँ।

अगला विषय है उच्च-प्रदर्शन वाला EnumSet।

public class Main {
    enum E { A { int v() { return 1; } }; abstract int v(); }
    public static void main(String[] args) {
        System.out.println("Abstract enum recap: " + E.A.v());
    }
}
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “Enums में Abstract Methods” पाठ निःशुल्क है?

हाँ—“Enums में Abstract Methods” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Enums में Abstract Methods” में मैं क्या सीखूँगा?

हर constant का अलग व्यवहार आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“Enums में Abstract Methods” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Fields और Methods वाले Enums
  2. Enums में Abstract Methods
  3. EnumSet
  4. EnumMap
← Java Academy पर वापस जाएँ