Java Programlama

Kalıtım (Inheritance)

Kalıtım, nesneye dayalı programlamada mevcut bir sınıf içinde bulunan veri ve metotların bu sınıftan türetilen alt sınıflar içinde kullanılması olarak tanımlanabilir. Kendisinden türetme yapılan sınıf ana, ebeveyn veya süper sınıf olarak, türetilen sınıflar ise çocuk, alt veya uzantı sınıf olarak isimlendirilir.

Bir ana sınıftan yeni bir çocuk sınıf türetildiğinde, ana sınıfta yer alan tüm veri ve metotlar çocuk sınıf tarafından kullanılabileceği gibi, çocuk sınıf içinde de yeni veri ve metotlar tanımlanabilir. Eğer ihtiyaç duyulursa, ana sınıftan devralınan metotlar geçersiz hale getirilir ve aynı isim altında farklı kodlar yazılır.

Ana sınıftan bir çocuk sınıf türeterek, ana sınıfta yer alan veri ve metotların devralınması, devralınan metotlar için yeniden kod yazmaya gerek duymadan, ana sınıf içinde yer alan veri ve metotları kullanmaya olanak sağlar.

Ana sınıf içinde yer alan constructor metodu, sınıfın bir elemanı olarak değerlendirilmediğinden, çocuk sınıf tarafından devralınamaz, sadece çağrılabilir.

Herhangi bir sınıftan türetilmeden tanımı yapılan bir sınıf dolaylı olarak Object sınıfının bir alt sınıfıdır.

Object sınıfı, sınıf yapısının en üstünde yer alır. Birbirinden türetilen sınıfların sırası ve sayısı ne olursa olsun, bu sınıfların sıralamasında en üsttedir.

Bir ana sınıftan çocuk sınıf türetmek için extends ifadesi kullanılır.

Aşağıdaki örnekte, bir ana sınıftan üretilen çocuk sınıflar içinde, ana sınıfa ait yazdirBilgi() fonksiyonu geçersiz hale getirilir ve bu fonksiyon için farklı kodlar oluşturulur. Oluşturulan farklı kodlar önce ana sınıf içindeki yazdirBilgi() fonksiyonunu çağırır. Sonra, kendi içinde tanımlı olan değişken değerlerini ekrana yazan kendi sınıfı içinde yer alan fonksiyonu çağırır.

Sınıfları kullanmak için oluşturulan javaprog.java programında her sınıfa ait birer adet değişken oluşturulur. Bu değişkenlere constructor fonksiyonları yoluyla değer atanır. Yine bu değişkenler yoluyla yazdirBilgi() fonksiyonu çağrılır.

/* personel.java : Ana sınıf bildirimi */
public class personel {
  public String adi;    /* Sınıf dışından erişilebilen public değişken  */
  public String soyadi; /* Sınıf dışından erişilebilen public değişken  */
  private int yasi;     /* Sadece sınıf içinden erişilebilen private değişken  */

  /* Constructor metod */
  public personel(String cadi, String csoyadi, int cyasi) {
    adi = cadi;
    soyadi = csoyadi;
    yasi = cyasi;
  } 

  /* Sınıf dışından erişilebilen public metod */
  public String getBilgi() {
    return adi + " " + soyadi;
  }
 
  /* Sınıf dışından erişilebilen public metod */
  public int getPrivBilgi() {
    return yasi;
  }
  
  /* Sınıf dışından erişilebilen public metod */
  public void yazdirBilgi() {
    System.out.println("Okulumuz personeli: " + getBilgi() + " " + getPrivBilgi());
  }  
}
/* ogretmen.java : Çocuk sınıf bildirimi */
public class ogretmen extends personel {
  public String brans;
  public int hizmet;

  /* Constructor metod */
  public ogretmen(String cadi, String csoyadi, int cyasi, String cbrans, int chizmet) {
    super(cadi, csoyadi, cyasi); 
    brans = cbrans;
    hizmet = chizmet;
  } 

  public String getogretmenBilgi() {
    return brans + " " + hizmet;
  }
 
  /* Üst sınıfta geçersiz hale getirilmiş metod */
  public void yazdirBilgi() {
    super.yazdirBilgi();
    System.out.println("Öğretmen: Branş - Hizmet yılı: " + getogretmenBilgi());
  }  
}
/* ogrenci.java : Çocuk sınıf bildirimi */
public class ogrenci extends personel {
  public String bolum;
  public String sinif;
  public int okulno;

  /* Constructor metod */
  public ogrenci(String cadi, String csoyadi, int cyasi, String cbolum, String csinif, int cokulno) {
    super(cadi, csoyadi, cyasi); 
    bolum = cbolum;
    sinif = csinif;
    okulno = cokulno;
  } 

  public String getogrenciBilgi() {
    return bolum + " " + sinif + " " + okulno;
  }
 
  /* Üst sınıfta geçersiz hale getirilmiş metod */
  public void yazdirBilgi() {
    super.yazdirBilgi();
    System.out.println("Öğrenci: Bölüm - Sınıf - No.: " + getogrenciBilgi());
  }  
}
/* javaprog.java */
public class javaprog {
  public static void main(String args[]){
    /* Her sınıfa  ait 3 farklı değişken bildirimi */
    personel personel01 = new personel("Ahmet", "Kara", 27);
    ogretmen ogretmen01 = new ogretmen("Nedim", "Sakin", 35, "Matematik", 13);
    ogrenci ogrenci01 = new ogrenci("Serdar", "Uzun", 16, "Sayısal", "11FEN-A", 408);

    personel01.yazdirBilgi(); /* personel sınıfı fonksiyonu çağrılır */
    ogretmen01.yazdirBilgi(); /* ogretmen sınıfı fonksiyonu çağrılır */
    ogrenci01.yazdirBilgi();  /* ogrenci sınıfı fonksiyonu çağrılır */
  }
}

Yukarıdaki dört dosyanın aynı dizin içinde yer alması yeterlidir. Komut satırında aşağıdaki satırları yazdığınızda program derlenir ve çalışır:

C:\>javac javaprog.java
C:\>java -Dfile.encoding=Cp857 javaprog
Okulumuz personeli: Ahmet Kara 27
Okulumuz personeli: Nedim Sakin 35
Öğretmen: Branş - Hizmet yılı: Matematik 13
Okulumuz personeli: Serdar Uzun 16
Öğrenci: Bölüm - Sınıf - No.: Sayısal 11FEN-A 408