Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java Abstract Class

วิธีใช้คลาสและเมธอด “นามธรรม” ของ Java

Abstraction เป็นหนึ่งในหลักการสำคัญสามประการในการเขียนโปรแกรมเชิงวัตถุ ควบคู่ไปกับการห่อหุ้มและการสืบทอด

นามธรรมเป็นวิธีหนึ่งในการลดความซับซ้อนของโปรแกรมของคุณและทำให้โค้ดของคุณอ่านง่ายขึ้น ใน Java นามธรรมช่วยให้คุณ:

  1. แสดงเฉพาะรายละเอียดของชั้นเรียนและ
  2. ซ่อนรายละเอียดอื่นๆ ทั้งหมดของคลาสนั้น

นามธรรมสามารถใช้ได้กับทั้งคลาสและเมธอดใน Java

บทช่วยสอนนี้จะกล่าวถึงพื้นฐานของนามธรรมใน Java วิธีใช้คลาสนามธรรมและวิธีการใช้เมธอดนามธรรม นอกจากนี้ เราจะพูดถึงตัวอย่างบางส่วนเพื่อช่วยให้คุณเข้าใจแนวคิดที่สำคัญนี้ได้ดีขึ้น

จาวานามธรรม

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

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

มีสองกรณีที่ใช้ abstraction ใน Java:ในคลาสและในเมธอด

คลาสนามธรรม Java

ใน Java คลาสนามธรรมคือคลาสที่คุณไม่สามารถสร้างวัตถุใดๆ ได้ กล่าวอีกนัยหนึ่ง คลาสนามธรรมไม่สามารถสร้างอินสแตนซ์ได้

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

ในการสร้างคลาสนามธรรมใน Java คุณสามารถใช้คำสำคัญที่เป็นนามธรรม นี่คือตัวอย่างคลาสนามธรรมใน Java:

abstract class BankAccount { // Code here}

เนื่องจากเป็นคลาสนามธรรม หากเราพยายามสร้างวัตถุด้วยคลาสนี้ โปรแกรมของเราจะส่งคืนข้อผิดพลาด

ตัวอย่างเช่น สมมติว่าเราพยายามสร้างอินสแตนซ์ของคลาสที่เรียกว่า BankAccount เราต้องการเรียกอินสแตนซ์นี้ว่า lucyAccount และต้องการให้เก็บข้อมูลธนาคารของ Lucy ลูซี่เป็นหนึ่งในลูกค้าของเรา เราใช้รหัสต่อไปนี้เพื่อพยายามสร้างอินสแตนซ์นี้:

บัญชีธนาคาร lucyAccount =บัญชีธนาคารใหม่ ();

เมื่อเรารันโค้ดนี้ โปรแกรมของเราจะส่งคืน:

บัญชีธนาคารเป็นนามธรรม ไม่สามารถยกตัวอย่างได้

อย่างที่คุณเห็น คุณไม่สามารถกำหนดคลาสนามธรรมให้กับวัตถุได้

อย่างไรก็ตาม คุณยังสามารถสร้างคลาสย่อยจากคลาสนามธรรมได้ ในหัวข้อถัดไป เราจะพูดถึงวิธีสร้างคลาสย่อยจากคลาสนามธรรม

การสืบทอดคลาสนามธรรม

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

สมมติว่าเรากำลังสร้างโปรแกรมที่เก็บข้อมูลบัญชีธนาคารสำหรับธนาคาร โปรแกรมของเราจะประกอบด้วยสองคลาส:BankAccount และ CheckingAccount BankAccount จะเป็นคลาสหลักที่เก็บแอตทริบิวต์และวิธีการทำงานกับบัญชีธนาคาร CheckingAccount จะเป็นคลาสย่อยที่สืบทอดวิธีการเหล่านั้น

สำหรับตัวอย่างนี้ BankAccount เป็นคลาสนามธรรม เราต้องการใช้เพื่อสร้างบัญชีตรวจสอบเท่านั้น

นี่คือรหัสที่เราใช้กับคลาส BankAccount และ CheckingAccount ของเราได้:

คลาสนามธรรม BankAccount { โมฆะสาธารณะ viewAccountNumber () { System.out.println ("หมายเลขบัญชี:#1932042"); }} คลาส CheckingAccount ขยาย BankAccount {} คลาสหลัก { public static void main(String[] args) { CheckingAccount lucyAccount =บัญชี CheckingAccount ใหม่ (); lucyAccount.viewAccountNumber(); }}

รหัสของเราส่งคืน:

หมายเลขบัญชี:#1932042

ในตัวอย่างนี้ เราได้สร้างสามคลาส:

  1. บัญชีธนาคาร . นี่คือคลาสนามธรรม มันมีวิธีการที่เรียกว่า viewAccountNumber() . เนื่องจาก BankAccount เป็นคลาสนามธรรม เราจึงไม่สามารถสร้างวัตถุของคลาสได้
  2. กำลังตรวจสอบบัญชี . นี่คือชั้นเรียนเด็ก ในฐานะคลาสย่อย จะสืบทอดแอตทริบิวต์และวิธีการของคลาส BankAccount
  3. หลัก . ชั้นเรียนนี้มีรหัสสำหรับโปรแกรมหลักของเรา

ในโปรแกรมหลักของเรา เราสร้างอินสแตนซ์ของคลาส CheckingAccount และเรียกว่า lucyAccount lucyAccount เป็นวัตถุ หลังจากสร้างสามคลาสในโปรแกรมของเราแล้ว เราใช้อ็อบเจ็กต์ lucyAccount ในเมธอด viewAccountNumber() .

ตารางต่อไปนี้สรุปส่วนสำคัญของตัวอย่างนี้:

NAME ประเภท คำอธิบาย
บัญชีธนาคาร นามธรรม/คลาสหลัก จัดเก็บแอตทริบิวต์และวิธีการทำงานกับบัญชีธนาคาร
กำลังตรวจสอบบัญชี คลาสลูก สืบทอดเมธอดของคลาสพาเรนต์
หลัก คลาส มีโค้ดสำหรับโปรแกรมหลักของเรา
lucyAccount วัตถุ การใช้งานโปรแกรมของเราในโลกแห่งความเป็นจริง

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการสืบทอดใน Java โปรดอ่านคู่มือฉบับสมบูรณ์ของเราที่นี่

วิธีการบทคัดย่อของ Java

นอกจากคลาสแล้ว เมธอดยังสามารถเป็นนามธรรมได้อีกด้วย

เมื่อคุณประกาศเมธอด abstract คุณจะใช้คีย์เวิร์ด abstract เดียวกับด้านบน คุณไม่ได้ระบุเนื้อหาใดๆ และคุณสามารถประกาศวิธีการที่เป็นนามธรรมภายในคลาสนามธรรมเท่านั้น

นี่คือตัวอย่างวิธีการนามธรรมใน Java:

นามธรรมเป็นโมฆะ checkBalance();

ในตัวอย่างนี้ เราได้สร้างวิธีนามธรรมที่เรียกว่า checkBalance() . เมธอดนี้ไม่มีเนื้อหา กล่าวคือ ไม่มีโค้ดที่เกี่ยวข้องกับเมธอด

กลับไปที่ตัวอย่างธนาคารของเราจากก่อนหน้านี้ โปรแกรมนั้นมีวิธีการที่เป็นนามธรรม:lucyAccount.viewAccountNumber(); .

เราใช้วิธีนามธรรมนี้เพื่อให้โปรแกรมของเราแสดงหมายเลขบัญชีธนาคารของลูกค้าได้ ในตัวอย่างด้านบน (จากส่วนก่อนหน้า) คลาสหลักของ BankAccount จะทำหน้าที่เป็นเทมเพลตสำหรับคลาสย่อย

ในกรณีนี้ ชั้นเรียนย่อยเป็นบัญชีธนาคารประเภทต่างๆ เนื่องจากลูกค้าของเราอาจมีบัญชีธนาคารมากกว่าหนึ่งประเภท และเราอาจต้องการใช้งานฟังก์ชันเดียวกันในบัญชีแต่ละประเภท คลาสย่อยที่เราสร้างไว้ด้านบนคือ:CheckingAccount

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

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

ในโค้ดด้านล่าง เราใช้คีย์เวิร์ด abstract สองครั้ง ขั้นแรก เราประกาศคลาสนามธรรม (BankAccount) จากนั้นเราจะประกาศวิธีการที่เป็นนามธรรมซึ่งภายหลังจะช่วยเรานำโปรแกรมให้แสดงหมายเลขบัญชีของลูกค้าได้ การประกาศวิธีการที่เป็นนามธรรมนั้นคือ:abstract void viewAccountNumber(); . จากนั้นเราก็เริ่มต้น viewAccountNumber() วิธีการในคลาสย่อยของ CheckingAccount นี่คือรหัส:

<ก่อนหน้า> BankAccount คลาสนามธรรม { โมฆะ viewAccountNumber นามธรรม ();} คลาส CheckingAccount ขยาย BankAccount { โมฆะสาธารณะ viewAccountNumber () { System.out.println ("การตรวจสอบหมายเลขบัญชี:#1932042"); }} คลาสหลัก { โมฆะคงที่สาธารณะ main (สตริง [] args) { CheckingAccount lucyAccount =ใหม่ CheckingAccount (); lucyAccount.viewAccountNumber(); }}

รหัสของเราส่งคืน:

กำลังตรวจสอบหมายเลขบัญชี:#1932042

ตัวอย่างนี้ส่งคืนผลลัพธ์เดียวกันกับตัวอย่างก่อนหน้าของเรา แต่มีข้อแตกต่างบางประการที่ควรทราบ คือ:

  1. การประกาศวิธีนามธรรม ในตัวอย่างนี้ เราประกาศคลาสนามธรรมที่เรียกว่า BankAccount คลาสนี้มีเมธอดนามธรรมที่เรียกว่า viewAccountNumber() .
  2. ส่วนขยายของวิธีนามธรรม เราขยายคลาส BankAccount ผ่านคลาส CheckingAccount คลาส CheckingAccount สืบทอดค่าที่เก็บไว้ในเมธอด BankAccount

ในคลาส CheckingAccount เรากำหนดวิธีการที่เรียกว่า viewAccountNumber() —ที่เข้าถึงได้เฉพาะวัตถุ CheckingAccount จากนั้น ในการดูหมายเลขบัญชีของลูกค้า เราจะสร้างออบเจ็กต์ CheckingAccount

ตัวอย่าง Java Abstraction

ตอนนี้เราได้พูดถึงทั้งคลาสนามธรรมของ Java และเมธอดนามธรรมแล้ว เราสามารถสำรวจตัวอย่างทั้งหมดของนามธรรมใน Java ในการดำเนินการดังกล่าว เราจะรวบรวมทุกสิ่งที่เราพูดถึงในตัวอย่างบัญชีธนาคารด้านบนไว้ด้วยกัน

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

ที่ธนาคารของเรา หากบัญชีธนาคารเป็นบัญชีเช็ค เลขที่บัญชีจะเริ่มต้นด้วยเลขประจำตัวลูกค้าและลงท้ายด้วย 555 หากบัญชีเป็นบัญชีออมทรัพย์ เลขที่บัญชีจะลงท้ายด้วย 777

เราสามารถใช้รหัสต่อไปนี้เพื่อสร้างโปรแกรมนี้:

<ก่อนหน้า> BankAccount คลาสนามธรรม { โมฆะนามธรรม viewAccountNumber ();} คลาส CheckingAccount ขยาย BankAccount { โมฆะสาธารณะ viewAccountNumber () { System.out.println ("การตรวจสอบหมายเลขบัญชี:#1932042555"); }} คลาส SavingsAccount ขยายบัญชีธนาคาร { โมฆะสาธารณะ viewAccountNumber () { System.out.println ("หมายเลขบัญชีออมทรัพย์:#1932042777"); }} คลาสหลัก { โมฆะคงที่สาธารณะ main (สตริง [] args) { CheckingAccount ellieCheckingAccount =ใหม่ CheckingAccount (); ellieCheckingAccount.viewAccountNumber () บัญชีออมทรัพย์ ellieSavingsAccount =บัญชีออมทรัพย์ใหม่ (); ellieSavingsAccount.viewAccountNumber(); }}

รหัสของเราส่งคืน:

กำลังตรวจสอบหมายเลขบัญชี:#1932042555หมายเลขบัญชีออมทรัพย์:#1932042777

ในตัวอย่างนี้ เราสร้างคลาสและเรียกว่า BankAccount คลาสนี้มีเมธอดนามธรรมหนึ่งวิธี เรียกว่า viewAccountNumber() .

บัญชีแต่ละประเภทกำหนดหมายเลขบัญชีต่างกัน ดังนั้นเราจึงไม่สามารถใช้งาน viewAccountNumber() วิธีการในคลาส BankAccount แทน แต่ละคลาสย่อยของคลาส BankAccount ใช้ viewAccountNumber() วิธีการ

ในตัวอย่างนี้ คลาส CheckingAccount กำหนดหมายเลขบัญชีเป็นตัวเลขที่ขึ้นต้นด้วย ID ของลูกค้าและลงท้ายด้วย 555 คลาส SavingsAccount กำหนดหมายเลขบัญชีเป็นตัวเลขที่ขึ้นต้นด้วย ID ของลูกค้าและลงท้ายด้วย 777

ในโค้ดของเรา เราเริ่มต้นอินสแตนซ์ของคลาส CheckingAccount สำหรับลูกค้าชื่อ Ellie อินสแตนซ์นี้ถูกกำหนดชื่อ ellieCheckingAccount และเราเรียกใช้ viewAccountNumber() วิธีดูหมายเลขบัญชี ส่งคืน:

กำลังตรวจสอบหมายเลขบัญชี:#1932042555

นอกจากนี้เรายังเริ่มต้นอินสแตนซ์ของคลาส SavingsAccount ที่เรียกว่า ellieSavingsAccount และเราเรียกใช้ viewAccountNumber() วิธีดูหมายเลขบัญชี ส่งคืน:

หมายเลขบัญชีออมทรัพย์:#1932042777

บทสรุป

Abstraction เป็นคุณลักษณะที่สำคัญของการเขียนโปรแกรมเชิงวัตถุ ช่วยให้คุณสามารถซ่อนรายละเอียดบางอย่างในคลาสหรือเมธอด และแสดงเฉพาะข้อมูลที่จำเป็นเท่านั้น ในการสร้างคลาสนามธรรมและวิธีการใน Java ให้ใช้ abstract คำสำคัญ

บทช่วยสอนนี้อภิปรายพร้อมตัวอย่าง วิธีการทำงานของ abstraction สาเหตุที่ abstraction มีประโยชน์ และวิธีสร้างเมธอดและคลาสนามธรรมใน Java ตอนนี้คุณพร้อมที่จะเริ่มทำงานกับคลาสนามธรรมและวิธีการใน Java อย่างโปรแกรมเมอร์มืออาชีพแล้ว!