खोज…


परिचय

डायनामिक मेथड डिस्पैच क्या है?

डायनेमिक मेथड डिस्पैच एक ऐसी प्रक्रिया है जिसमें ओवरराइड विधि से कॉल को कंपाइल-टाइम के बजाय रनटाइम पर हल किया जाता है। जब किसी संदर्भ द्वारा एक ओवरराइड विधि को बुलाया जाता है, तो जावा निर्धारित करता है कि उस विधि के किस संस्करण को ऑब्जेक्ट के प्रकार के आधार पर निष्पादित करना है। इसे रनटाइम बहुरूपता के रूप में भी जाना जाता है।

हम इसे एक उदाहरण के माध्यम से देखेंगे।

टिप्पणियों

  • गतिशील बाँधना = देर से बाँधना
  • अमूर्त कक्षाओं को तत्काल नहीं किया जा सकता है, लेकिन उन्हें उप-वर्गीकृत किया जा सकता है (बाल वर्ग के लिए आधार)
  • अमूर्त विधि एक ऐसी विधि है जिसे बिना क्रियान्वयन के घोषित किया जाता है
  • अमूर्त वर्ग में कार्यान्वयन के साथ या उसके बिना घोषित तरीकों का मिश्रण हो सकता है
  • जब एक अमूर्त वर्ग उप-वर्गीय होता है, तो उपवर्ग आमतौर पर अपने मूल वर्ग के सभी अमूर्त तरीकों के लिए कार्यान्वयन प्रदान करता है। हालांकि, यदि ऐसा नहीं होता है, तो उपवर्ग को भी सार घोषित किया जाना चाहिए
  • डायनेमिक विधि प्रेषण एक ऐसा तंत्र है जिसके द्वारा रनटाइम में ओवरराइड विधि के लिए कॉल का समाधान किया जाता है। यह कैसे जावा रनटाइम बहुरूपता को लागू करता है।
  • Upcasting: एक उपप्रकार को सुपरटाइप पर कास्टिंग करना, वंशानुक्रम के पेड़ के ऊपर की ओर।
  • रनटाइम पॉलीमॉर्फिज्म = डायनेमिक पॉलीमोर्फिज्म

डायनेमिक विधि डिस्पैच - उदाहरण कोड

सार वर्ग:

package base;

/*
Abstract classes cannot be instantiated, but they can be subclassed
*/
public abstract class ClsVirusScanner {

    //With One Abstract method
    public abstract void fnStartScan();
    
    protected void fnCheckForUpdateVersion(){
        System.out.println("Perform Virus Scanner Version Check");
    }
    
    protected void fnBootTimeScan(){
        System.out.println("Perform BootTime Scan");
    }
    protected void fnInternetSecutiry(){
        System.out.println("Scan for Internet Security");
    }
    
    protected void fnRealTimeScan(){
        System.out.println("Perform RealTime Scan");
    }
    
    protected void fnVirusMalwareScan(){
        System.out.println("Detect Virus & Malware");
    }    
}

ओवरराइडिंग एब्सट्रैक्ट मेथड इन चाइल्ड क्लास:

import base.ClsVirusScanner;

//All the 3 child classes inherits the base class ClsVirusScanner
//Child Class 1
class ClsPaidVersion extends ClsVirusScanner{
    @Override
    public void fnStartScan() {
        super.fnCheckForUpdateVersion();
        super.fnBootTimeScan();
        super.fnInternetSecutiry();
        super.fnRealTimeScan();
        super.fnVirusMalwareScan();
    }
};    //ClsPaidVersion IS-A ClsVirusScanner
//Child Class 2

class ClsTrialVersion extends ClsVirusScanner{
    @Override
    public void fnStartScan() {
        super.fnInternetSecutiry();
        super.fnVirusMalwareScan();
    }
};    //ClsTrialVersion IS-A ClsVirusScanner

//Child Class 3
class ClsFreeVersion extends ClsVirusScanner{
    @Override
    public void fnStartScan() {
        super.fnVirusMalwareScan();
    }
};     //ClsTrialVersion IS-A ClsVirusScanner 

डायनामिक / लेट बाइंडिंग डायनेमिक विधि प्रेषण की ओर ले जाती है:

//Calling Class
public class ClsRunTheApplication {

    public static void main(String[] args) {

        final String VIRUS_SCANNER_VERSION = "TRIAL_VERSION";

        //Parent Refers Null
        ClsVirusScanner objVS=null; 

        //String Cases Supported from Java SE 7
        switch (VIRUS_SCANNER_VERSION){
        case "FREE_VERSION":

            //Parent Refers Child Object 3
            //ClsFreeVersion IS-A ClsVirusScanner
            objVS = new ClsFreeVersion(); //Dynamic or Runtime Binding
            break;
        case "PAID_VERSION":

            //Parent Refers Child Object 1
            //ClsPaidVersion IS-A ClsVirusScanner
            objVS = new ClsPaidVersion(); //Dynamic or Runtime Binding
            break;
        case "TRIAL_VERSION":

            //Parent Refers Child Object 2
            objVS = new ClsTrialVersion(); //Dynamic or Runtime Binding
            break;
        }

        //Method fnStartScan() is the Version of ClsTrialVersion()
        objVS.fnStartScan();

    }
}

परिणाम :

Scan for Internet Security  
Detect Virus & Malware

Upcasting:

objVS = new ClsFreeVersion();
objVS = new ClsPaidVersion();
objVS = new ClsTrialVersion()


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow