Java Programlama

Çok biçimlilik (Polymorphism)

Çok biçimlilik sözlük anlamı olarak birden fazla şekilde varlık gösterebilen nesne ya da kavramları ifade etmektedir.

Çok biçimlilik Java programlama dilinde, bir değişkenin birden fazla nesneye dayandırılması olarak özetlenebilir.

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 3 adet personel ana sınıfına ait değişken oluşturulur. Bu değişkenlere ana ve çocuk sınıflara ait constructor fonksiyonları ile değer atanır. Yine bu değişkenler yoluyla yazdirBilgi() fonksiyonu çağrılır. Aynı isimle yapılan çağrıya rağmen, her çağrı hangi sınıf içindeki yazdirBilgi() fonksiyonunu kullanması gerekiyorsa, o fonksiyonu çağırır.

Sınıflar içinde farklı kodlarla tanımlanmış aynı isime sahip yazdirBilgi() fonksiyonunun çağrılabilmesi için personel ana sınıfına ait 3 farklı değişken oluşturulduğuna dikkat ediniz.

/* 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[]){
    /* personel sınıfına ait 3 farklı değişken bildirimi */
    personel per01, per02, per03;

    per01 = new personel("Ahmet", "Kara", 27);
    per02 = new ogretmen("Nedim", "Sakin", 35, "Matematik", 13);
    per03 = new ogrenci("Serdar", "Uzun", 16, "Sayısal", "11FEN-A", 408);

    per01.yazdirBilgi(); /* personel sınıfı fonksiyonu çağrılır */
    per02.yazdirBilgi(); /* ogretmen sınıfı fonksiyonu çağrılır */
    per03.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