คำถามที่น่าสนใจและสำคัญนี้ถูกถามกับผู้อ่านคนหนึ่งของฉันในระหว่างการสัมภาษณ์ทางโทรศัพท์สำหรับตำแหน่งนักพัฒนา Java แม้ว่าเขาจะรู้ว่า เป็นไปไม่ได้
ที่จะสร้างคลาสนามธรรมfinal
ในภาษา Javaแต่เขาก็สับสนกับถ้อยคำของคำถาม คำตอบนั้นง่ายมาก: ไม่
final
ไม่สามารถมีวิธีการเชิงนามธรรมใน -class ได้ ทำไม เพราะทันทีที่คุณประกาศวิธีนามธรรมในคลาสภาษา Java คลาสนี้จะกลายเป็นนามธรรมโดยอัตโนมัติ และ
final
คุณไม่สามารถสร้างคลาสนามธรรมในภาษา Java ได้
final
ซึ่งหมายความว่า ไม่มี เมธอดนามธรรมใน Java -class
นักพัฒนา Java จำนวนมากสับสนเมื่อตอบคำถามนี้เนื่องจากถ้อยคำ แม้ว่าผู้ถามคำถามจะคุ้นเคยกับแนวคิดทั่วไปแล้ว เขาอาจไม่ตระหนักว่าหลังจากประกาศวิธีนามธรรมในนั้นแล้ว จะกลายเป็นนามธรรม และคุณไม่สามารถสร้างคลาสนามธรรม
final
ใน Java ได้ ประเด็นนี้แยกคำถามนี้ออกจากคำถามที่พบบ่อยและถามบ่อย:
เป็นไปได้ไหมใน Java ที่จะประกาศคลาสให้เป็นนามธรรมและสุดท้ายในเวลาเดียวกัน ลองดูโค้ดตัวอย่างหนึ่งเพื่อแสดงให้เห็นว่า
final
เป็นไปไม่ได้ที่จะประกาศวิธีนามธรรมในคลาส - ขอให้
Hello.java
เรามี
public final
คลาสที่เรียกว่า
Hello
ซึ่งมีวิธี
print()
นามธรรม
public final class Hello {
public abstract void print();
}
พิมพ์รหัสนี้ลงใน IDE คุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ พวกเขาบอกว่า
Hello
จะต้องเป็นคลาสนามธรรมเพื่อให้สามารถประกาศวิธีนามธรรมได้
สิ่งเดียวกันนี้จะเกิดขึ้นหากคุณพิมพ์โค้ดนี้ใน Notepad และคอมไพล์โดยใช้ยูทิลิตี้ javac จากบรรทัดคำสั่ง ตามข้อกำหนดของ Java ทันทีที่คุณประกาศวิธีนามธรรมภายในคลาส คลาสนั้นจะกลายเป็นคลาสนามธรรม และเนื่องจากคุณไม่สามารถสร้างคลาสนามธรรม
final
ใน Java ได้ คอมไพเลอร์จึงสร้างข้อผิดพลาด สิ่งนี้เป็นจริงสำหรับทั้งคลาสระดับบนสุดและคลาสที่ซ้อนกันในภาษา Java แม้ว่าคุณจะประกาศวิธีนามธรรมใน
final
คลาสที่ซ้อนกัน ข้อผิดพลาดก็จะยังเหมือนเดิม คำถามที่เกี่ยวข้องอีกข้อคือ
คลาสนามธรรมใน Java สามารถมีวิธีการคงที่ได้หรือไม่ คำตอบ:ใช่ สามารถทำได้ ไม่มีปัญหาในการประกาศวิธีคงที่ในคลาสนามธรรม เนื่องจากการใช้วิธีการคงที่คุณไม่จำเป็นต้องสร้างอินสแตนซ์ของคลาส จึงสามารถเรียกได้ง่ายๆ โดยใช้ชื่อคลาส เราสามารถแก้ไขตัวอย่างของเราเพื่อรวม
Hello
วิธีการไว้ ในคลาส
main()
ซึ่งเป็นแบบคงที่ใน Java ดังที่แสดงด้านล่าง:
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
}
}
อย่างที่คุณเห็น ไม่มีข้อผิดพลาดในการคอมไพล์เกิดขึ้น โค้ดนี้คอมไพล์ได้โดยไม่มีปัญหา เนื่องจากใน Java คุณสามารถประกาศวิธีสแตติกในคลาสนามธรรมได้อย่างปลอดภัย
ข้อสรุปโดยย่อ เป็นไปไม่ได้ที่จะประกาศวิธีนามธรรม ใน
final
คลาส - เพราะเมื่อคุณทำเช่นนี้ คลาสจะกลายเป็นนามธรรมโดยอัตโนมัติตามข้อกำหนดของ Java และเนื่องจาก
final
คลาสใน Java ไม่สามารถเป็นนามธรรมได้ จึงเป็นสิ่งที่ยอมรับไม่ได้ และคอมไพลเลอร์จะห้ามไม่ให้คุณทำเช่นนี้โดยส่งข้อผิดพลาด แต่คุณสามารถประกาศวิธีการคงที่ทั้งในคลาสสุดท้ายและคลาสนามธรรมได้โดยไม่มีปัญหา
GO TO FULL VERSION