Yazan : Şadi Evren ŞEKER

Bu yazının amacı, java dilinde bulunan final kelimesini açıklamaktır. Temel olarak final kelimesi, java dilinde 3 farklı yerde bulunabilir:

  • Sınıf tanımında
  • Metot (fonksiyon) tanımında
  • Değişken tanımında

Sırasıyla bu durumları uygulamalar üzerinden görelim.

public final class sonsınıf{ }

yukarıdaki tanımın yapılması halinde, sınıf (class) nihai bir sınıf olur (final class) ve artık bu sınıftan kalıtım yapılamaz (miras, inheritance).

Örneğin yukarıdaki tanımdan sonra, aşağıdaki şekilde bir kod yazılması hatadır:

public class yenisınıf extends sonsınıf{ }

sebebi ise sonsınıf’ın nihai sınıf olarak tanımlanmış olmasıdır (final class).

Benzer şekilde bir metot tanımının başına final kelimesi yazılarak, metodun nihai olması durumunda, bu metodun üzerine bindirme yapılamaz (overriding).

Örneğin aşağıdaki kodu ele alalım:

public class deneme{
  public final int toplama(int a,int b){
     return a + b;
 }
}

Yukarıdaki kodda, toplama fonksiyonunun nihai hali kodlanmıştır. Bu sınıftan miras alan hiçbir sınıf toplama fonksiyonunu değiştiremez.

Örneğin aşağıdaki kod hatalıdır:

public class yenisınıf extends deneme{
  public int toplama(int a, int b){ }
}

Yukarıdaki bu kodun hatası, final olarak tanımlanan bir metodun üzerine bindirme yapıyor olmasıdır (overriding).

Son olarak bir değişkenin nihai olmasını inceleyelim. (final variables)

Bir değişken nihai tanımlandıysa, bu durumda içerisine atama sadece bir kere yapılabilir (assignment).

Örneğin aşağıdaki tanımı ele alalım:

final int x = 10;

yukarıdaki koddan sonra, kodun herhangi bir yerinde x değişkenine yeni değer atanamaz. Örneğin

x= 7;

yazılması durumunda hata alınır.

Nihayi değişkenler, sabit değişkenlerden farklıdır (constant variables, const)

En önemli farkı ise, derleme zamanında (compile time) değişkenin değerinin bilinmesi gerekmemesidir.

Örneğin aşağıdaki kodu ele alalım:

public class deneme{
  final int x;
  public deneme(int x){
   this.x = x;
  }
}

Yukarıdaki kod doğru ve çalışan bir koddur çünkü değişkene sadece bir kere, yapıcı fonksiyon marifetiyle (constructor, inşa fonksiyonu) atama yapılmıştır. Buna karşılık aşağıdaki kod hatalıdır:

public class deneme{
  const int x;
  public deneme(int x){
   this.x = x;
  }
}

Çünkü yukarıdaki kodda, değişkenin tanımı sırasında değer atanması yapılması gerekir. Örneğin

const int x = 10;

gibi ve bu atamadan sonra değer değiştirilemez. Örneğin yukarıdaki kodda bulunan final kelimesinin const kelimesi ile değişmesi halinde, yapıcı fonksiyonda (constructor) hala hata bulunmaktadır çünkü sabit bir değişkenin değeri değiştirilmeye çalışılmaktadır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir