คำนำ
เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้ Java และติดต่อกับกลไกการโทรกลับ (โทรกลับ) เมื่อฉันพบกันครั้งแรกฉันรู้สึกสับสนมากและคำอธิบายที่เกี่ยวข้องที่ฉันค้นหาทางออนไลน์ก็แค่พูดถึงหรือพูดง่าย ๆ ราวกับว่าฉันได้กำหนดโทรกลับ แน่นอนหลังจากที่ฉันเข้าใจการโทรกลับฉันไปอ่านคำอธิบายต่าง ๆ ทางออนไลน์และไม่มีปัญหา อย่างไรก็ตามสำหรับฉันที่เป็นผู้เริ่มต้นฉันขาดกระบวนการค่อยเป็นค่อยไป
การโทรกลับเป็นโหมดการโทรสองทาง หมายความว่าอย่างไร? นั่นคือ พรรคที่เรียกว่าจะเรียกอีกฝ่ายเมื่อมีการเรียก ซึ่งเรียกว่าการโทรกลับ “ ถ้าคุณโทรหาฉันฉันจะโทรกลับ”
ไม่เข้าใจ? มันไม่สำคัญก่อนอื่นลองดูที่วิธีคลาสสิกนี้ในการใช้การโทรกลับ:
คลาส A ใช้อินเทอร์เฟซ Inta - พื้นหลัง 1
คลาส A มีการอ้างอิง B ของคลาส B - พื้นหลัง 2
คลาส B มีวิธีการทดสอบพารามิเตอร์ INA (INA A) - พื้นหลัง 3
วัตถุของ A การเรียกใช้วิธีการของตัวเองทดสอบ (a) - ขั้นตอนนี้เทียบเท่ากับคุณโทรหาฉัน
จากนั้น b สามารถเรียกวิธีการ ina ในวิธีการทดสอบ - ขั้นตอนนี้เทียบเท่ากับฉันโทรหาคุณกลับ
ก่อนที่จะเริ่มลองนึกภาพสถานการณ์: เด็กอนุบาลเพิ่งเรียนรู้เพิ่มเติมภายใน 10
ด้านล่างนี้ฉันจะอธิบายความเข้าใจส่วนตัวของฉันเกี่ยวกับกลไกการโทรกลับตามลำดับจากตื้นจนถึงลึก หากมีความไม่เหมาะสมฉันหวังว่าฉันจะให้คำแนะนำกับคุณ!
บทที่ 1 ต้นกำเนิดของเรื่องราว
ครูอนุบาลเขียนสูตร "1 + 1 =" บนกระดานดำและเสี่ยวหมิงจะเติมลงในช่องว่าง
เนื่องจากฉันได้เรียนรู้การเพิ่มน้อยกว่า 10, Xiao Ming สามารถคำนวณคำถามนี้ได้ทั้งหมดด้วยตัวเอง รหัสเพื่อจำลองกระบวนการมีดังนี้:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักศึกษาสาธารณะ (ชื่อสตริง) {// todo todo stub stub stub auto-generated this.name = name; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } int private int calcadd (int a, int b) {return a + b; } โมฆะสาธารณะ Fillblank (int a, int b) {int result = calcadd (a, b); System.out.println (ชื่อ + "การคำนวณทางจิต:" + a + " +" + b + "=" + ผลลัพธ์); - เมื่อเสี่ยวหมิงเติม ช่องว่าง เขาคำนวณ clacadd โดยตรงและพบว่าผลลัพธ์คือ 2 และเขียนผลลัพธ์ในพื้นที่ รหัสทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a = 1; int b = 1; นักเรียน S = นักเรียนใหม่ ("Xiao Ming"); S.Fillblank (A, B); - ผลการดำเนินการมีดังนี้:
เลขคณิตจิตของ Xiao Ming: 1 + 1 = 2
กระบวนการนี้ดำเนินการโดยวัตถุอินสแตนซ์ของ ชั้นเรียนนักเรียน เพียงอย่างเดียวและไม่เกี่ยวข้องกับกลไกการโทรกลับ
บทที่ 2. การค้นหาปัญหาสำหรับครูอนุบาล
ในช่วงพักครูโรงเรียนอนุบาลก็มีความตั้งใจและเขียนว่า "168 + 291 =" บนกระดานดำเพื่อให้เสี่ยวหมิงทำเสร็จแล้วกลับไปที่สำนักงาน
ดอกไม้ถู! เหตุใดครูทุกคนจึงไม่สามารถเข้ากับเสี่ยวหมิงได้ เห็นได้ชัดว่ามันเกินกว่ากฎโอเค? ในเวลานี้เสี่ยวหมิงเห็นได้ชัดว่าไม่สามารถทำมันได้ด้วยเลขคณิตทางจิตเหมือนข้างต้น เมื่อเขาสับสนเสี่ยวฮงในชั้นเรียนส่งเครื่องคิดเลขที่สามารถคำนวณเพิ่มเติมได้ (Profiteer)! - - - Xiao Ming เกิดขึ้นเพื่อรู้วิธีใช้เครื่องคิดเลขดังนั้นเขาจึงคำนวณผลลัพธ์ผ่านเครื่องคิดเลขและเสร็จสิ้นการเติมเต็มในช่องว่าง
รหัสสำหรับเครื่องคิดเลขคือ:
เครื่องคิดเลขคลาสสาธารณะ {public int add (int a, int b) {return a + b; - ปรับเปลี่ยน ชั้นเรียนของนักเรียน และเพิ่มวิธีการใช้เครื่องคิดเลข:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักศึกษาสาธารณะ (ชื่อสตริง) {// todo todo stub stub stub auto-generated this.name = name; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } @suppresswarnings ("ไม่ได้ใช้") int calcadd ส่วนตัว (int a, int b) {return a + b; } usecalculator ส่วนตัว int (int a, int b) {ส่งคืนเครื่องคิดเลขใหม่ (). เพิ่ม (a, b); } โมฆะสาธารณะ Fillblank (int a, int b) {int result = usecalculator (a, b); System.out.println (ชื่อ + "ใช้เครื่องคิดเลข:" + a + " +" + b + "=" + ผลลัพธ์); - รหัสทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a = 168; int b = 291; นักเรียน S = นักเรียนใหม่ ("Xiao Ming"); S.Fillblank (A, B); - ผลการดำเนินการมีดังนี้:
Xiao Ming ใช้เครื่องคิดเลข: 168 + 291 = 459
กลไกการโทรกลับไม่ได้มีส่วนร่วมในกระบวนการนี้ แต่งานของเซียวหมิงบางส่วนได้รับการถ่ายโอนและจะได้รับความช่วยเหลือจากเครื่องคิดเลข
3. ครูอนุบาลกลับมาแล้ว
เมื่อฉันพบว่าเสี่ยวหมิงได้เพิ่มตัวเลข 3 หลักเสร็จแล้วครูคิดว่าเสี่ยวหมิงฉลาดมากและมีความสามารถพิเศษ ดังนั้นเขาจึงเขียนว่า "26549 + 16487 =" บนกระดานดำขอให้เสี่ยวหมิงเติมเต็มช่องว่างก่อนเข้าเรียนแล้วกลับไปที่สำนักงาน
เสี่ยวหมิงมองเพื่อนตัวน้อยที่สนุกนอกห้องเรียนและอดไม่ได้ที่จะรู้สึกเศร้า หากคุณไม่ออกไปเล่นการพักนี้จะถูกทำลาย! - - - เมื่อมองไปที่เครื่องคิดเลขที่เสี่ยวฮงส่งมาอีกครั้งเสี่ยวหมิงคิดแผน: ให้เสี่ยวฮงทำเพื่อเขา
Xiao Ming บอก Xiaohong ว่าคำถามคือ "26549 + 16487 =" จากนั้นชี้ให้เห็นตำแหน่งที่เฉพาะเจาะจงสำหรับการกรอกผลลัพธ์และจากนั้นก็ออกไปสนุก
ที่นี่เราไม่ได้ใช้ Xiaohong เพียงอย่างเดียว แต่คำนึงถึงเครื่องคิดเลขนี้ที่สามารถคำนวณเพิ่มเติมและ Xiaohong โดยรวมเครื่องคิดเลขที่ยอดเยี่ยมที่สามารถคำนวณผลลัพธ์และเติมช่องว่างได้ พารามิเตอร์ที่ Super Calculator ต้องผ่านเป็นสองส่วนเพิ่มเติมและตำแหน่งในการเติมช่องว่างและเนื้อหาเหล่านี้จำเป็นต้องได้รับการแจ้งล่วงหน้านั่นคือ Xiao Ming ต้องการเปิดเผยวิธีการบางส่วนของ Xiao Hong วิธีที่ง่ายที่สุดคือการบอก Xiao Hong การอ้างอิงของเขาและการเพิ่มเติมทั้งสองด้วยกัน
ดังนั้น วิธีการเพิ่ม ของ supercalculator ควรมีตัวถูกดำเนินการสองตัวและอ้างอิงถึง Xiao Ming เองรหัสมีดังนี้:
Public Class SuperCalculator {โมฆะสาธารณะเพิ่ม (int a, int b, นักเรียน xiaoming) {int result = a + b; Xiaoming.Fillblank (A, B, ผลลัพธ์); - Xiao Ming ไม่ต้องการเลขคณิตทางจิตหรือเครื่องคิดเลขอีกต่อไปดังนั้นเขาจึงต้องมีวิธีการขอความช่วยเหลือจาก Xiaohong รหัสมีดังนี้:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักศึกษาสาธารณะ (ชื่อสตริง) {// todo todo stub stub stub auto-generated this.name = name; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } โมฆะสาธารณะ callhelp (int a, int b) {supercalculator ใหม่ (). เพิ่ม (a, b, this); } โมฆะสาธารณะ Fillblank (int a, int b, int ผลลัพธ์) {system.out.println (ชื่อ + "การค้นหาการคำนวณ Xiaohong:" + a + " +" + b + "=" + ผลลัพธ์); - รหัสทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a = 26549; int b = 16487; นักเรียน S = นักเรียนใหม่ ("Xiao Ming"); S.CallHelp (A, B); - ผลการทำงานคือ:
Xiao Ming ขอความช่วยเหลือ Xiaohong ในการคำนวณ: 26549 + 16487 = 43036
กระบวนการดำเนินการคือ: Xiao Ming เรียกวิธีการเพิ่มของ Xiao Hong (new SuperCalculator()) ผ่าน วิธี CallHelp ของเขาเองและผ่านการอ้างอิงของเขาเอง (นี่) เป็นพารามิเตอร์เมื่อโทร หลังจากเสี่ยวฮงใช้เครื่องคิดเลขเพื่อให้ได้ผลลัพธ์เขาเรียกวิธี Fillblank ของ Xiao Ming และเติมผลลัพธ์ในพื้นที่บนกระดานดำ
ไฟและไฟ! ณ จุดนี้ฟังก์ชั่นการโทรกลับอย่างเป็นทางการเปิดตัว วิธี Fillblank ของ Xiao Ming คือสิ่งที่เรามักจะโทรกลับ
ด้วยวิธีนี้จะเห็นได้อย่างชัดเจนว่าเสี่ยวหมิงไม่ต้องรออีกต่อไปจนกว่าการเพิ่มจะเสร็จสิ้นและผลลัพธ์จะเต็มไปด้วยกระดานดำก่อนที่เขาจะสนุกกับเพื่อนของเขา งานเติมเต็มในช่องว่างทำโดย Xiaohong ซึ่งเป็นเครื่องคิดเลขซูเปอร์ ข้อดีของการโทรกลับได้เริ่มขึ้นแล้ว
บทที่ 4 แม่สามีที่ประตู
มีหญิงชราคนหนึ่งที่มีผมหงอกที่ทางเข้าโรงเรียนอนุบาล เธอตั้งแผงขายของที่นั่นขายอาหารขยะที่เกือบจะหมดอายุทุกวันโดยไม่คำนึงถึงลมและฝน เพราะฉันแก่แล้วใจของฉันสับสนเล็กน้อยและฉันมักจะคิดไม่ออกว่าฉันได้รับเงินมากแค่ไหน อยู่มาวันหนึ่งเธอได้ยินเซียวหมิงโดยบังเอิญเกี่ยวกับวิธีที่เธอต่อสู้กับปัญญาและความกล้าหาญกับครูอนุบาลด้วยความช่วยเหลือของเสี่ยวฮง ดังนั้นแม่สามีของฉันจึงตัดสินใจที่จะหาเครื่องคิดเลขซุปเปอร์การ์ดสีแดงเล็ก ๆ น้อย ๆ ให้เป็นผู้ช่วยตัวน้อยของเธอและจัดหาแถบเผ็ด Weilong เป็นรางวัลเป็นรางวัล Xiaohong ไม่สามารถต้านทานการล่อลวงและเห็นด้วย
เมื่อมองย้อนกลับไปที่รหัสในบทก่อนหน้าเราพบว่าพารามิเตอร์ที่ต้องการโดย วิธีการเพิ่ม ของเครื่องคิดเลขซุปเปอร์การ์ดสีแดงเล็ก ๆ คือตัวแปรจำนวนเต็มสองตัวและ วัตถุนักเรียน แต่หญิงชราไม่ใช่นักเรียน แต่เป็นผู้ขายรายเล็กดังนั้นเธอจึงต้องทำการดัดแปลงที่นี่ ในกรณีนี้มันเป็นเรื่องธรรมดาที่เราจะนึกถึงมรดกและความหลากหลาย หากเราขอให้นักเรียนเสี่ยวหมิงและผู้ขายของหญิงชรารับมรดกจากชั้นเรียนผู้ปกครองเราก็ต้องผ่านการอ้างอิงไปยังชั้นเรียนหลักไปยังเครื่องคิดเลขการ์ดสีแดงเล็ก ๆ น้อย ๆ
อย่างไรก็ตามในการใช้งานจริงเมื่อพิจารณาการสืบทอดมรดกเดียวของ Java และไม่ต้องการเปิดเผยตัวเองมากเกินไปกับผู้อื่นเราใช้วิธีการสืบทอดจากอินเทอร์เฟซเพื่อร่วมมือกับชั้นเรียนภายใน
กล่าวอีกนัยหนึ่งเสี่ยวฮงหวังที่จะให้บริการการคำนวณแก่เด็ก ๆ ในชั้นเรียนในอนาคตและในขณะเดียวกันก็ให้บริการบัญชีแก่หญิงชราและยังขยายธุรกิจของผู้อื่นในอนาคต ดังนั้นเธอจึงเห็นด้วยกับลูกค้าทุกคนด้วยวิธีการประมวลผลแบบครบวงจรนั่นคือตัวถูกดำเนินการที่เธอต้องการและวิธีการทำหลังจากทำการคำนวณเสร็จสิ้น Xiaohong ได้สร้างวิธีการแบบครบวงจรนี้ลงในอินเทอร์เฟซและให้กับทุกคนรหัสมีดังนี้:
อินเทอร์เฟซสาธารณะ dojob {โมฆะสาธารณะ Fillblank (int a, int b, int ผลลัพธ์); -เนื่องจากแรงบันดาลใจมาจากการช่วยเสี่ยวหมิงเติมเต็มในช่องว่างเซียวฮงยังคงรักษาความตั้งใจดั้งเดิมของเธอและปฏิบัติต่อธุรกิจทั้งหมดของเธอในฐานะ Fillblank
ในเวลาเดียวกัน Xiaohong ได้ปรับเปลี่ยนเครื่องคิดเลขของเขาเพื่อให้สามารถจัดการคนต่าง ๆ ที่ใช้ อินเตอร์เฟส DOJOB ในเวลาเดียวกัน รหัสมีดังนี้:
Public Class SuperCalculator {โมฆะสาธารณะเพิ่ม (int a, int b, ลูกค้า doJob) {int result = a + b; customer.fillblank (a, b, ผลลัพธ์); - หลังจาก Xiao Ming และ Old Lady ได้อินเทอร์เฟซนี้ตราบใดที่พวกเขาใช้อินเทอร์เฟซนี้มันก็เทียบเท่ากับการบอก Xiaohong ถึงวิธีที่จะจัดการผลลัพธ์ในรูปแบบที่เป็นเอกภาพและใช้คลาสภายในตามที่กล่าวไว้ก่อนหน้านี้ รหัสมีดังนี้:
Xiao Ming's:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว = null; นักศึกษาสาธารณะ (ชื่อสตริง) {// todo todo stub stub stub auto-generated this.name = name; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } คลาสสาธารณะ DOHOMEWORK ใช้ doJob {@Override โมฆะสาธารณะ Fillblank (int a, int b, int result) {// todo วิธีการที่สร้างขึ้นอัตโนมัติระบบสตับระบบ. }} โมฆะสาธารณะ callhelp (int a, int b) {ใหม่ supercalculator (). เพิ่ม (a, b, dohomework ใหม่ ()); - หญิงชรา:
ผู้ขายคลาสสาธารณะ {ชื่อสตริงส่วนตัว = null; ผู้ขายสาธารณะ (ชื่อสตริง) {// todo todo stub constructor Auto-Generated this.name = name; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } คลาสสาธารณะ dohomework ใช้ dojob {@Override โมฆะสาธารณะ fillblank (int a, int b, int result) {// toDo วิธีการที่สร้างอัตโนมัติระบบ stub system.out.println (ชื่อ + "การค้นหา xiaohong เพื่อชำระบัญชี:" + " +" + " +" + " ใหม่ supercalculator (). เพิ่ม (a, b, new dohomework ()); ขั้นตอนการทดสอบมีดังนี้:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a = 56; int b = 31; int c = 26497; int d = 11256; นักเรียน S1 = นักเรียนใหม่ ("Xiao Ming"); ผู้ขาย S2 = ผู้ขายใหม่ ("คุณยาย"); S1.CALLHELP (A, B); S2.CALLHELP (C, D); - ผลการดำเนินการมีดังนี้:
Xiao Ming ขอความช่วยเหลือ Xiaohong ในการคำนวณ: 56 + 31 = 87
หญิงชราขอความช่วยเหลือจาก Xiaohong เพื่อชำระบัญชี: 26497 + 11256 = 37753 หยวน
สรุป
จะเห็นได้อย่างชัดเจนว่าเสี่ยวฮงได้ปฏิบัติต่อเรื่องนี้แล้วว่าเป็นอาชีพและคุณจะรู้ด้วยการดูชื่อที่เธอให้อินเทอร์เฟซ dojob
บางคนอาจถามว่าทำไมหญิงชราสามารถทำเงินได้มากด้วยการตั้งแผงขายของ? มีปัญหากับการโฟกัสของคุณหรือไม่? - สิ่งที่เรากำลังพูดถึงที่นี่คือกลไกการโทรกลับ! -
ทั้งหมดที่ฉันรู้ก็คือธุรกิจของ Xiaohong ยังคงขยายตัวในภายหลังและก่อนที่จะจบการศึกษาจากโรงเรียนอนุบาลในที่สุดเธอก็ซื้อบ้านหลังแรกของเธอในชีวิตของเธอด้วยเงินที่เธอได้รับ
ข้างต้นเป็นคำอธิบายที่น่าสนใจและละเอียดของกลไกการโทรกลับ (การโทรกลับ) ใน Java ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้ Java ขอบคุณสำหรับการสนับสนุน Wulin.com