ตามที่กล่าวไว้final
ใช้กับวิธี Java เพื่อทำเครื่องหมายว่าวิธีการนั้นไม่สามารถเขียนทับได้ (สำหรับขอบเขตของวัตถุ) หรือซ่อนอยู่ (สำหรับคงที่) สิ่งนี้ทำให้นักพัฒนาดั้งเดิมสามารถสร้างฟังก์ชันการทำงานที่ไม่สามารถเปลี่ยนแปลงได้โดยคลาสย่อยและนั่นคือการรับประกันทั้งหมดที่มีให้
ซึ่งหมายความว่าหากวิธีการนั้นขึ้นอยู่กับส่วนประกอบอื่น ๆ ที่ปรับแต่งได้เช่นฟิลด์ / วิธีการที่ไม่ใช่แบบสาธารณะฟังก์ชันการทำงานของวิธีการขั้นสุดท้ายอาจยังสามารถปรับแต่งได้ นี่เป็นสิ่งที่ดีแม้ว่า (มีความหลากหลาย) จะอนุญาตให้ปรับแต่งบางส่วน
มีเหตุผลหลายประการที่ทำให้ไม่สามารถปรับแต่งบางสิ่งได้รวมถึง:
ประสิทธิภาพ - คอมไพเลอร์บางตัวสามารถวิเคราะห์และเพิ่มประสิทธิภาพการทำงานโดยเฉพาะอย่างยิ่งสิ่งที่ไม่มีผลข้างเคียง
รับข้อมูลที่ห่อหุ้ม - ดูที่ Object ที่ไม่เปลี่ยนรูปแบบซึ่งมีการตั้งค่าคุณลักษณะของพวกเขาในเวลาการก่อสร้างและไม่ควรเปลี่ยนแปลง หรือค่าที่คำนวณได้มาจากแอตทริบิวต์เหล่านั้น ตัวอย่างที่ดีคือString
คลาสJava
ความน่าเชื่อถือและสัญญา - วัตถุที่มีองค์ประกอบของ primitives ( int
, char
, double
ฯลฯ ) และ / หรือวัตถุอื่น ๆ การดำเนินการบางอย่างที่ไม่สามารถใช้งานได้กับองค์ประกอบเหล่านั้นควรใช้งานได้หรือมีเหตุผลเมื่อใช้ในวัตถุที่ใหญ่กว่า วิธีการที่มีfinal
ตัวดัดแปลงสามารถใช้เพื่อให้แน่ใจว่า คลาส Counter เป็นตัวอย่างที่ดี
public class Counter {
private int counter = 0;
public final int count() {
return counter++;
}
public final int reset() {
return (counter = 0);
}
}
หากpublic final int count()
วิธีนี้ไม่ใช่final
เราสามารถทำสิ่งนี้:
Counter c = new Counter() {
public int count() {
super.count();
return super.count();
}
}
c.count(); // now count 2
หรืออะไรทำนองนี้:
Counter c = new Counter() {
public int count() {
int lastCount = 0;
for (int i = super.count(); --i >= 0; ) {
lastCount = super.count();
}
return lastCount;
}
}
c.count(); // Now double count