Upcasting และ Downcasting ใน Java คืออะไร? คำอธิบายง่ายๆ

เผยแพร่แล้ว: 2021-01-22

สารบัญ

Upcasting และ Downcasting ใน Java

Typecasting ใน Java หมายถึงขั้นตอนที่เกี่ยวข้องกับการแปลงประเภทข้อมูลหนึ่งไปเป็นอีกประเภทหนึ่ง ซึ่งสามารถทำได้ทั้งโดยอัตโนมัติและด้วยตนเอง ในขณะที่โปรแกรมเมอร์ต้องทำการแปลงด้วยตนเอง คอมไพเลอร์จะใช้สำหรับกระบวนการอัตโนมัติ downcasting และ upcasting นั้นเป็นประเภทของอ็อบเจ็กต์ typecasting สองประเภท

ออบเจ็กต์ลูกและพาเรนต์เป็นอ็อบเจ็กต์ที่แตกต่างกันสองประเภท ขณะนี้ มีสองวิธีด้วยความช่วยเหลือซึ่งวัตถุสามารถเริ่มต้นได้ ต่อมายังสืบทอดคุณสมบัติที่คลาสย่อยและพาเรนต์มี วิธีเหล่านี้รวมถึง:

  • ลูก c = ลูกใหม่ (): เข้าถึงสมาชิกทั้งหมดที่อยู่ภายใต้ชั้นเรียนย่อยและผู้ปกครอง
  • Parent p = new Child(): เข้าถึงเฉพาะสมาชิกคลาสพาเรนต์เท่านั้น เช่นเดียวกับเมธอดที่ถูกแทนที่ในคลาสย่อย

โดยพื้นฐานแล้ว การแคสต์ประเภท Parent to Child เรียกว่า Upcasting ในขณะที่การแคสต์ประเภท Child to Parent เรียกว่า Downcasting

ระบบ typecasting ใช้ดูว่าตัวแปรถูกประมวลผลโดยฟังก์ชันถูกต้องหรือไม่ ในขณะที่ downcasting เป็นไปไม่ได้โดยปริยาย เราสามารถทำการ upcasting ได้ทั้งโดยชัดแจ้งและโดยปริยาย

ทั้ง downcasting และ upcasting เป็นองค์ประกอบที่สำคัญของ Java และช่วยให้ผู้คนสามารถพัฒนาโปรแกรมที่ซับซ้อนด้วยการใช้ไวยากรณ์ที่เรียบง่าย พวกเขายังมีข้อได้เปรียบที่ดีเช่นการจัดกลุ่มวัตถุที่หลากหลายเข้าด้วยกันหรือ Polymorphism

เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

อัพแคสติ้ง

ในการอัปแคสต์ อ็อบเจ็กต์ลูกเป็น typecast ไปยังอ็อบเจ็กต์คลาสพาเรนต์ ด้วยการใช้กระบวนการนี้ ผู้คนสามารถเข้าถึงเมธอดและตัวแปรที่แตกต่างของคลาสพาเรนต์ถึงคลาสลูกได้อย่างง่ายดาย จำเป็นต้องเข้าถึงเมธอดและตัวแปรเฉพาะบางรายการของคลาสย่อย เช่น เมธอดที่ถูกแทนที่ ในกระบวนการ ในหลาย ๆ กรณี การขยายสัญญาณเรียกอีกอย่างว่าการขยายภาพและการทำให้เป็นภาพรวม การออกอากาศสามารถทำได้โดยปริยาย และให้ความยืดหยุ่นแก่ผู้คนในการเข้าถึงสมาชิกของชั้นเรียนหลัก

ตัวอย่างต่อไปนี้สามารถช่วยให้เข้าใจกระบวนการได้ดีขึ้น

ตัวอย่าง: มีสัตว์ประเภทหนึ่งที่มีสัตว์หลายชนิด ปลาเป็นหนึ่งในนั้น ทีนี้ สมมติว่าชั้นสัตว์ขยายออกไปตามชั้นปลา จะมีมรดกสองวิธี การสืบทอดเป็นหนึ่งในลักษณะสำคัญของ Object Oriented Programming หรือ OOP ซึ่งช่วยให้คลาสหนึ่งสามารถสืบทอดคุณสมบัติของอีกคลาสหนึ่งได้ นี่หมายถึงคลาสที่ได้รับซึ่งเป็น superset ของคลาสฐาน อาจมีวิธีการเพิ่มเติมที่นี่มากกว่าคลาสพื้นฐาน ในระหว่างการถ่ายทอด สิ่งเดียวที่อาจเกิดขึ้นกับอินเทอร์เฟซของคลาสคือมันสามารถจบลงด้วยการสูญเสียเมธอดแทนที่จะได้รับมา ด้วยเหตุนี้ คอมไพเลอร์จึงทำให้อัพแคสต์ได้โดยไม่มีสัญลักษณ์พิเศษใดๆ หรือการแคสต์ที่ชัดเจน

องค์ประกอบเทียบกับมรดก

เมื่อพูดถึงการเขียนโปรแกรมเชิงวัตถุ มีโอกาสสูงที่คนๆ หนึ่งอาจจบลงด้วยการสร้างและใช้งานโดยเพียงแค่วิธีการบรรจุภัณฑ์และข้อมูลร่วมกันในชั้นเรียน ในขณะที่ใช้วัตถุที่มีอยู่ในชั้นเรียนนั้นในภายหลัง ผู้คนอาจใช้คลาสที่มีอยู่เพื่อพัฒนาคลาสใหม่ที่มีองค์ประกอบ การสืบทอดใช้ค่อนข้างน้อย ในขณะที่เรียนรู้ OPP ถึงแม้ว่าการสืบทอดจะได้รับความสนใจอย่างมาก สิ่งสำคัญคือนักพัฒนาต้องทราบการใช้งานที่ถูกต้องและอย่าพยายามใช้ทุกที่ที่ทำได้

อันที่จริง เราต้องใช้มันค่อนข้างน้อย เฉพาะในสถานการณ์ที่พบว่าการสืบทอดมีประโยชน์จริงๆ วิธีที่ง่ายที่สุดในการระบุว่าบุคคลควรใช้การสืบทอดหรือองค์ประกอบคือการถามตัวเองว่าพวกเขาจำเป็นต้องถ่ายทอดจากนักแสดงใหม่ไปยังนักแสดงฐานหรือไม่ ในกรณีที่จำเป็นจะต้องใช้การสืบทอด อย่างไรก็ตาม หากไม่ใช่ข้อกำหนด ก็ต้องอาศัยความจำเป็นในการรับมรดกต่อไป

ดาวน์แคสติ้ง

Downcasting เป็นอีกรูปแบบหนึ่งของการแคสต์ประเภทอ็อบเจ็กต์ และใช้ในการกำหนดอ็อบเจ็กต์อ้างอิงคลาสย่อยให้กับคลาสพาเรนต์ที่ไม่อนุญาตใน Java Downcast ไม่ยากเกินไปที่จะเข้าใจ ตัวอย่างเช่น หากมีคลาสฐานและคลาสที่มาจากคลาสพื้นฐานโดยทางอ้อมหรือโดยอ้อม เมื่อใดก็ตามที่อ็อบเจ็กต์ของประเภทคลาสพื้นฐานกลายเป็น typecast ในคลาสที่ได้รับ จะถูกเรียกว่า downcast ดังนั้น ตาม downcasting หนึ่งจะลงไดอะแกรมการสืบทอดโดยพยายามใช้อ็อบเจ็กต์คลาสฐานแล้วแปลงเป็นประเภทคลาสที่ได้รับ อย่างไรก็ตาม สิ่งสำคัญที่ควรทราบโดยอิงจากโค้ดที่เขียน ดาวน์แคสต์อาจหรืออาจไม่สมเหตุสมผล

ในขณะที่ผู้คนดำเนินการระบบ downcasting พวกเขาจะไม่พบข้อผิดพลาดของคอมไพเลอร์ทุกประเภท อย่างไรก็ตาม พวกเขาจะต้องเผชิญกับ java.lang.ClassCastException ซึ่งเป็นข้อยกเว้นรันไทม์ ดังนั้นตอนนี้คำถามก็เกิดขึ้นถ้าไม่สามารถ downcasting ใน Java แล้วทำไมผู้คนถึงทำมัน? พูดง่ายๆ ว่า downcasting สามารถใช้ได้เฉพาะในสถานการณ์เฉพาะที่อ็อบเจ็กต์ที่อ้างอิงโดยคลาสพาเรนต์เป็นของคลาสย่อย

Downcasting มีประโยชน์อย่างยิ่งเมื่อเปรียบเทียบวัตถุหนึ่งกับอีกวัตถุหนึ่ง

ตรวจสอบว่า downcasting ถูกต้องหรือไม่ รันได้

ระบบ getClass() ช่วยให้นักพัฒนาเข้าใจคลาสของอ็อบเจ็กต์ที่ถูกส่งผ่านไป จากนั้นจึงเปรียบเทียบกับคลาสปัจจุบัน ในกรณีที่ไม่เท่ากัน downcasting จะไม่ถูกต้อง และการลองใช้กระบวนการนี้จะไม่มีประโยชน์ แนวคิดของ downcasting ส่วนใหญ่ใช้การแคสต์ super-type กับ subtype กระบวนการหล่อดังกล่าวมักจะทำในลักษณะที่ชัดเจน โดยพื้นฐานแล้วหมายความว่าประเภทที่ใหญ่กว่านั้นถูกสร้างขึ้นเพื่อให้พอดีกับประเภทขนาดเล็กอย่างชัดเจน

อัพแคสติ้ง vs ดาวน์แคสติ้ง

อัพแคสติ้งและ. Downcasting มีความแตกต่างเฉพาะเจาะจงมาก บางส่วนของพวกเขาได้รับการขีดเส้นใต้สั้น ๆ ในพอยน์เตอร์ต่อไปนี้:

  • ใน Upcasting วัตถุลูกเป็น typecast ไปยังวัตถุหลัก ในทางกลับกัน การอ้างอิงของอ็อบเจ็กต์คลาสพาเรนต์จบลงด้วยการส่งต่อไปยังคลาสย่อยเมื่อพูดถึง downcasting
  • ผู้คนสามารถทำการอัพแคสต์ได้ทั้งโดยชัดแจ้งและโดยปริยาย ในขณะที่ดาวน์แคสต์สามารถทำได้อย่างชัดแจ้งเท่านั้น
  • ในกรณีของการถ่ายทอด ผู้คนสามารถเข้าถึงตัวแปรและเมธอดของคลาสพาเรนต์ในคลาสย่อยได้ แต่ไม่ใช่ในทางกลับกัน อย่างไรก็ตาม ใน downcasting ตัวแปรและวิธีการของทั้งสองคลาสนั้นสามารถเข้าถึงได้ง่าย
  • การอัปแคสต์ช่วยให้เข้าถึงได้เฉพาะเมธอดคลาสย่อยเท่านั้น ทั้งเมื่อทำ downcasting เมธอดและตัวแปรทั้งหมดที่อยู่ภายใต้คลาสทั้งสองจะสามารถเข้าถึงได้

บทสรุป

การอัปแคสต์นั้นไม่ค่อยใช้ใน Java ในกรณีส่วนใหญ่ ผู้คนใช้เมื่อต้องพัฒนาโค้ดที่เกี่ยวข้องกับคลาสพาเรนต์ เมื่อพูดถึงการพัฒนาโค้ดที่ให้การเข้าถึงพฤติกรรมของคลาสย่อยนั้น downcasting มักจะถูกนำมาใช้

หากคุณต้องการเรียนรู้ Java และได้รับการรับรองในการประมวลผลแบบคลาวด์ด้วย upGrad เสนอ โปรแกรมใบรับรองขั้นสูงในการประมวลผลแบบคลาว ด์ หลักสูตรออนไลน์ระยะเวลา 7.5 เดือนได้รับการออกแบบมาโดยเฉพาะสำหรับมืออาชีพด้านการทำงาน เพื่อช่วยให้พวกเขาได้เข้าสู่บทบาทการประมวลผลแบบคลาวด์

มาเป็นนักพัฒนาเต็มรูปแบบ

สมัครทันทีสำหรับวิทยาศาสตรมหาบัณฑิตสาขาวิทยาการคอมพิวเตอร์จาก LIVERPOOL JOHN MOORES