logo

Atzvanīšana, izmantojot Java saskarnes

Atzvanīšana programmā C/C++: Funkcijas izsaukšanas mehānismu no citas funkcijas sauc par atzvanīšanu. Funkcijas atmiņas adrese tiek attēlota kā “funkcijas rādītājs” tādās valodās kā C un C++. Tātad atzvanīšana tiek panākta, nododot funkcijas1() rādītāju uz function2().
Atzvanīšana Java valodā: Bet atzvanīšanas funkcijas jēdziens Java neeksistē, jo Javai nav rādītāja koncepcijas. Tomēr ir situācijas, kad varētu runāt par atzvanīšanas objektu vai atzvanīšanas saskarni. Tā vietā, lai nodotu funkcijas atmiņas adresi tiek nodots interfeiss, kas norāda uz funkcijas atrašanās vietu.
 

Piemērs


Ņemsim piemēru, lai saprastu, kur var izmantot atzvanīšanu. Pieņemsim, ka programmētājs vēlas izveidot nodokļu kalkulatoru, kas aprēķina valsts kopējo nodokli. Pieņemsim, ka ir tikai divi nodokļi — centrālais un valsts nodoklis. Centrālais nodoklis ir izplatīts, savukārt valsts nodoklis dažādās valstīs ir atšķirīgs. Kopējais nodoklis ir šo divu summu summa. Šeit katram stāvoklim tiek ieviesta atsevišķa metode, piemēram, stateTax (), un izsauc šo metodi no citas metodes aprēķinātTax () kā:
 



static void calculateTax(address of stateTax() function) { ct = 1000.0 st = calculate state tax depending on the address total tax = ct+st; }


Iepriekšējā kodā statusTax() adrese tiek nodota aprēķinam Tax(). Metode CalculateTax() izmantos šo adresi, lai izsauktu noteikta štata metodi stateTax(), un tiks aprēķināts valsts nodoklis “st”. 
Tā kā stateTax() metodes kods mainās no viena stāvokļa uz citu, interfeisā labāk to deklarēt kā abstraktu metodi kā: 
 

interface STax { double stateTax(); }


Tālāk ir norādīta StateTax() ieviešana Pendžabas štatam: 
 

class Punjab implements STax{ public double stateTax(){ return 3000.0; } }


Tālāk ir norādīta statusTax() ieviešana HP stāvoklī: 
 

class HP implements STax { public double stateTax() { return 1000.0; } }


Tagad aprēķinātTax() metodi var izveidot šādi: 
 

static void calculateTax(STax t) { // calculate central tax double ct = 2000.0; // calculate state tax double st = t.stateTax(); double totaltax = st + ct; // display total tax System.out.println(Total tax =+totaltax); }

Šeit ievērojiet parametru “STAx t” aprēķinu Tax() metodē. “t” ir atsauce uz “STAx” saskarni, kas tiek nodota kā parametrs metodei. Izmantojot šo atsauci, metodi stateTax () sauc: 
 

double st = t.stateTax();


Šeit, ja “t” attiecas uz Punjab klases metodi stateTax (), tad šī metode tiek izsaukta un tiek aprēķināts tās nodoklis. Līdzīgi ZS klasei. Tādā veidā, nododot interfeisa atsauci uz aprēķinātTax() metodi, ir iespējams izsaukt jebkura stāvokļa stateTax() metodi. To sauc atzvanīšanas mehānisms.
Nododot saskarnes atsauci, kas attiecas uz metodi, ir iespējams izsaukt un izmantot šo metodi no citas metodes.
 

Java
// Java program to demonstrate callback mechanism // using interface is Java // Create interface import java.util.Scanner; interface STax {  double stateTax(); } // Implementation class of Punjab state tax class Punjab implements STax {  public double stateTax()  {  return 3000.0;  } } // Implementation class of Himachal Pradesh state tax class HP implements STax {  public double stateTax()  {  return 1000.0;  } } class TAX {  public static void main(String[] args)  throws ClassNotFoundException IllegalAccessException InstantiationException  {  Scanner sc = new Scanner(System.in);  System.out.println('Enter the state name');  String state = sc.next(); // name of the state  // The state name is then stored in an object c  Class c = Class.forName(state);  // Create the new object of the class whose name is in c  // Stax interface reference is now referencing that new object  STax ref = (STax)c.newInstance();  /*Call the method to calculate total tax  and pass interface reference - this is callback .  Here ref may refer to stateTax() of Punjab or HP classes  depending on the class for which the object is created  in the previous step  */  calculateTax(ref);  }  static void calculateTax(STax t)  {  // calculate central tax  double ct = 2000.0;  // calculate state tax  double st = t.stateTax();  double totaltax = st + ct;  // display total tax  System.out.println('Total tax =' + totaltax);  } } 

Izvade: 
 

Enter the state name Punjab Total tax = 5000.0


Atsauces: 
Kā ieviest atzvanīšanas funkcijas Java?  
Core Java: integrēta pieeja

Izveidojiet viktorīnu