Güncelleme: Aşağıdaki orijinal cevap, soruyu tam olarak anlamadan yazılmıştır ve bu nedenle doğrudan soruyu ele almaz. :)Bununla birlikte, finalanahtar kelimenin genel kullanımını anlamak isteyenler için bilgilendirici olmalıdır .
Soruya gelince, kendi yorumumu aşağıdan alıntılamak istiyorum.
Kendi uygulamanızda nihai olup olmayacağına karar vermek için sizi özgür bırakacak bir argümanın sonunu uygulamak zorunda olmadığınıza inanıyorum .
Ama evet, finalarayüzde ilan edebilmeniz oldukça garip geliyor , ancak uygulamada nihai değil . Aşağıdakilerden biri olursa daha mantıklı olurdu:
a. finalinterface (abstract) yöntemi bağımsız değişkenleri için anahtar kelimeye izin verilmedi (ancak bunu uygulamada kullanabilirsiniz) veya
b. finalarayüzde olduğu gibi bir argüman beyan etmek, onu finaluygulamada beyan edilmeye zorlar (ancak final dışı olanlar için zorlanmaz).
Bir yöntem imzasının finalparametrelere sahip olmasının iki nedenini düşünebilirim : Fasulye ve Nesneler ( Aslında ikisi de aynı nedendir, ancak biraz farklı bağlamlardır. )
Nesneler:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
// ^--- OUTPUT IS: Water Carrot Broccoli Chicken ChickenBroth
// We forgot to add cauliflower. It went into the wrong pot.
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
// ^--- Assignment allowed...
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
//cookingPot = new StringBuilder(cookingPot.toString());
// ^---- COMPILATION ERROR! It is final.
cookingPot.append("ChickenBroth ");
}
finalAnahtar kelime kazara yeni yaratmayacağı sağlanmalıdır yerel bunu yapmaya çalışırken bir derleme hatası göstererek tencereyi. Bu, tavuk suyunun, addChickenyöntemin sahip olduğu orijinal tenceremize eklenmesini sağladı . Bunu addVegetableskarnabaharı kaybettiğimiz yerle karşılaştırın, çünkü bunu orijinal tencerenin yerine yeni bir yerel tencereye ekledi .
Fasulye:
Nesnelerle aynı kavramdır (yukarıda gösterildiği gibi) . Fasulye esas Objectolarak Java'dadır. Bununla birlikte, fasulye (JavaBeans), çeşitli uygulamalarda, tanımlanmış bir ilgili veri koleksiyonunu depolamak ve dolaşmak için uygun bir yol olarak kullanılır. Nasıl addVegetablesyeni bir pişirme kabı oluşturarak StringBuilderve karnabahar ile fırlatarak pişirme işlemini bozabilir gibi, JavaBean bir pişirme kabı ile de aynısını yapabilir .
finalkopyalandığından, yerel türlerle hiçbir şey yapmaz.