อัปเดต:คำตอบเดิมด้านล่างถูกเขียนขึ้นโดยไม่เข้าใจคำถามทั้งหมดดังนั้นจึงไม่ได้กล่าวถึงคำถามโดยตรง:)
อย่างไรก็ตามต้องเป็นข้อมูลสำหรับผู้ที่ต้องการเข้าใจการใช้final
คำหลักทั่วไป
สำหรับคำถามฉันต้องการอ้างความคิดเห็นของตัวเองจากด้านล่าง
ฉันเชื่อว่าคุณไม่ได้ถูกบังคับให้ดำเนินการขั้นสุดท้ายของการโต้แย้งเพื่อปล่อยให้คุณมีอิสระในการตัดสินใจว่าควรถือเป็นที่สิ้นสุดหรือไม่ในการนำไปใช้ของคุณเอง
แต่ใช่มันฟังดูแปลกที่คุณสามารถประกาศfinal
ในอินเทอร์เฟซได้ แต่ขอให้มันไม่ใช่ขั้นสุดท้ายในการนำไปใช้งาน มันจะสมเหตุสมผลกว่าถ้า:
ก. final
ไม่อนุญาตให้ใช้คำหลักสำหรับอาร์กิวเมนต์เมธอดอินเทอร์เฟซ (นามธรรม) (แต่คุณสามารถใช้ในการนำไปใช้งานได้) หรือ
b. การประกาศอาร์กิวเมนต์เช่นเดียวกับfinal
ในอินเทอร์เฟซจะบังคับให้มีการประกาศfinal
ในการนำไปใช้งาน (แต่ไม่บังคับสำหรับรอบชิงชนะเลิศ)
ฉันนึกถึงเหตุผลสองประการที่ทำให้ลายเซ็นวิธีมีfinal
พารามิเตอร์ได้: ถั่วและวัตถุ ( อันที่จริงทั้งคู่มีเหตุผลเดียวกัน แต่มีบริบทที่แตกต่างกันเล็กน้อย )
วัตถุ:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
cookingPot.append("ChickenBroth ");
}
final
คำหลักที่ทำให้มั่นใจได้ว่าเราจะไม่ได้ตั้งใจสร้างใหม่ในท้องถิ่นหม้อหุงต้มโดยการแสดงรวบรวมข้อผิดพลาดเมื่อเราพยายามที่จะทำเช่นนั้น สิ่งนี้ทำให้มั่นใจได้ว่าน้ำซุปไก่จะถูกเติมลงในหม้อปรุงอาหารดั้งเดิมของเราซึ่งaddChicken
วิธีนี้ได้รับ เปรียบเทียบสิ่งนี้กับaddVegetables
ที่เราสูญเสียกะหล่ำดอกไปเพราะมันเพิ่มหม้อปรุงอาหารในท้องถิ่นใหม่แทนหม้อเดิมที่ได้รับ
ถั่ว:
มันเป็นแนวคิดเดียวกับวัตถุ(ตามที่แสดงไว้ด้านบน) ถั่วเป็นหลักObject
ใน Java อย่างไรก็ตามถั่ว (JavaBeans) ถูกใช้ในแอพพลิเคชั่นต่างๆเพื่อเป็นวิธีที่สะดวกในการจัดเก็บและส่งต่อชุดข้อมูลที่เกี่ยวข้องที่กำหนดไว้ เช่นเดียวกับaddVegetables
ที่จะทำได้เลอะกระบวนการปรุงอาหารโดยการสร้างหม้อหุงต้มใหม่StringBuilder
และทิ้งมันไปกับกะหล่ำก็ยังสามารถทำเช่นเดียวกันกับหม้อปรุงอาหารJavaBean
final
ไม่ได้ทำอะไรกับประเภทเนทีฟเนื่องจากถูกคัดลอก