Metot Ezme (Method Overriding)

Metot aşırı yükleme ve metot ezme sürekli kullanılan ve sıkça karıştırılan kavramlardır. Metot ezme bir sınıftaki metoda, başka bir sınıfta yeni fonksiyonalite eklemeye denir.

Bir metodun ezilebilmesi için ;

  • Metotların birbirinden türeyen sınıflarda bulunması gerekir. (is-a ilişkisi olmalıdır)
  • Metot imzalarının aynı olması gerekir. (bkz. NOT)
  • Metotların dönüş tiplerinin ya aynı ya da ezilen metodun dönüş tipinden türeyen bir tip olması gerekir.
  • Ezilen metodun erişim denetleyicisi ne ise ezen metodun erişim denetleyici de ya aynı ya da daha kapsamlı olmalıdır.
  • Metot bir Exception fırlatıyorsa ezen metot da ya aynı tipte ya da o Exception’dan türeyen başka bir tipte hata fırlatmalıdır.

[box type=”warning”] NOT : Bir metodun ismine, parametre sayısı ve tipinemetot imzası” denir.[/box]

[codesyntax lang=”java” lines=”no”]

package com.javauzmani.overriding;

public class Office {

	protected void kaydet() throws RuntimeException {
		// metot işlemleri
	}
}

[/codesyntax]

 

[codesyntax lang=”java” lines=”no”]

package com.javauzmani.overriding;

public class Word extends Office {

	protected void kaydet() throws RuntimeException {
		// metot işlemleri
	}

/*	protected void kaydet() throws ArrayIndexOutOfBoundsException {
		// metot işlemleri
	}

	public void kaydet() throws RuntimeException {
		// metot işlemleri
	}

*/

}

[/codesyntax]

Office sınıfından türeyen Word sınıfında kaydet metodunu yukarıdaki  gibi birden fazla şekilde ezebiliriz.

Metot Aşırı Yükleme (Method Overloading)

Aynı sınıfta aynı isimde metot tanımlamaya metot aşırı yükleme (overloading) denir. Metot aşırı yüklemenin kuralları vardır.

  • Metotların dönüş tipleri aynı olmalıdır.
  • Metotların isimleri aynı olmalıdır.
  • Metotların aldıkları parametre sayıları eşit ise bu parametrelerden en az birinin tipi farklı olmalıdır. Parametre sayıları farklı olabilir.
  • Metotların aynı sınıfta olması gerekir.

[codesyntax lang=”java” lines=”no”]

package com.javauzmani.overloading;

import java.io.File;

public class DvdOynatici {

	void oynat(File dosya){
		// dosya oynat
	}

	void oynat(String dosyaIsmi){
		// dosya oynat
	}

	void oynat(File dosya, int sure){
		// dosya oynat
	}
}

[/codesyntax]

[box type=”info”] Bir sınıfta birden fazla yapılandırıcı (constructor) varsa buna da “constructor overloading” denir.[/box]

[box] Aynı kurallar varargs metotlar için de geçerlidir.[/box]