JavaRush /จาวาบล็อก /Random-TH /คำถามและคำตอบ: เป็นไปได้ไหมที่จะกำหนดวิธีการเชิงนามธรรมใน...

คำถามและคำตอบ: เป็นไปได้ไหมที่จะกำหนดวิธีการเชิงนามธรรมในชั้นเรียนสุดท้าย?

เผยแพร่ในกลุ่ม
คำถามที่น่าสนใจและสำคัญนี้ถูกถามกับผู้อ่านคนหนึ่งของฉันในระหว่างการสัมภาษณ์ทางโทรศัพท์สำหรับตำแหน่งนักพัฒนา Java แม้ว่าเขาจะรู้ว่า เป็นไปไม่ได้ ที่จะสร้างคลาสนามธรรมfinalในภาษา Javaแต่เขาก็สับสนกับถ้อยคำของคำถาม คำตอบนั้นง่ายมาก: ไม่ finalไม่สามารถมีวิธีการเชิงนามธรรมใน -class ได้ ทำไม เพราะทันทีที่คุณประกาศวิธีนามธรรมในคลาสภาษา Java คลาสนี้จะกลายเป็นนามธรรมโดยอัตโนมัติ และfinalคุณไม่สามารถสร้างคลาสนามธรรมในภาษา Java ได้ finalซึ่งหมายความว่า ไม่มี เมธอดนามธรรมใน Java -class
คำถามและคำตอบ: เป็นไปได้ไหมที่จะกำหนดวิธีการเชิงนามธรรมในชั้นเรียนสุดท้าย?  - 1
นักพัฒนา Java จำนวนมากสับสนเมื่อตอบคำถามนี้เนื่องจากถ้อยคำ แม้ว่าผู้ถามคำถามจะคุ้นเคยกับแนวคิดทั่วไปแล้ว เขาอาจไม่ตระหนักว่าหลังจากประกาศวิธีนามธรรมในนั้นแล้ว จะกลายเป็นนามธรรม และคุณไม่สามารถสร้างคลาสนามธรรมfinalใน Java ได้ ประเด็นนี้แยกคำถามนี้ออกจากคำถามที่พบบ่อยและถามบ่อย: เป็นไปได้ไหมใน Java ที่จะประกาศคลาสให้เป็นนามธรรมและสุดท้ายในเวลาเดียวกัน ลองดูโค้ดตัวอย่างหนึ่งเพื่อแสดงให้เห็นว่าfinalเป็นไปไม่ได้ที่จะประกาศวิธีนามธรรมในคลาส - ขอให้Hello.javaเรามีpublic finalคลาสที่เรียกว่าHelloซึ่งมีวิธีprint()นามธรรม
public final class Hello {
  public abstract void print();
}
พิมพ์รหัสนี้ลงใน IDE คุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ พวกเขาบอกว่าHelloจะต้องเป็นคลาสนามธรรมเพื่อให้สามารถประกาศวิธีนามธรรมได้
คำถามและคำตอบ: เป็นไปได้ไหมที่จะกำหนดวิธีการเชิงนามธรรมในชั้นเรียนสุดท้าย?  - 2
คำถามและคำตอบ: เป็นไปได้ไหมที่จะกำหนดวิธีการเชิงนามธรรมในชั้นเรียนสุดท้าย?  - 3
สิ่งเดียวกันนี้จะเกิดขึ้นหากคุณพิมพ์โค้ดนี้ใน 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[]) {
     // Howой-то code
  }
}
อย่างที่คุณเห็น ไม่มีข้อผิดพลาดในการคอมไพล์เกิดขึ้น โค้ดนี้คอมไพล์ได้โดยไม่มีปัญหา เนื่องจากใน Java คุณสามารถประกาศวิธีสแตติกในคลาสนามธรรมได้อย่างปลอดภัย ข้อสรุปโดยย่อ เป็นไปไม่ได้ที่จะประกาศวิธีนามธรรม ในfinalคลาส - เพราะเมื่อคุณทำเช่นนี้ คลาสจะกลายเป็นนามธรรมโดยอัตโนมัติตามข้อกำหนดของ Java และเนื่องจากfinalคลาสใน Java ไม่สามารถเป็นนามธรรมได้ จึงเป็นสิ่งที่ยอมรับไม่ได้ และคอมไพลเลอร์จะห้ามไม่ให้คุณทำเช่นนี้โดยส่งข้อผิดพลาด แต่คุณสามารถประกาศวิธีการคงที่ทั้งในคลาสสุดท้ายและคลาสนามธรรมได้โดยไม่มีปัญหา
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION