Bu eğitimde, örnekler yardımıyla Java'da yöntemi geçersiz kılma hakkında bilgi edineceğiz.
Son derste kalıtım hakkında bilgi edindik. Kalıtım, mevcut bir sınıftan (üst sınıf) yeni bir sınıf (alt sınıf) türetmemize izin veren bir OOP özelliğidir. Alt sınıf, üst sınıfın niteliklerini ve yöntemlerini miras alır.
Şimdi, aynı yöntem hem üst sınıfta hem de alt sınıfta tanımlanırsa, alt sınıf sınıfının yöntemi, üst sınıfın yöntemini geçersiz kılar. Bu, yöntemi geçersiz kılma olarak bilinir.
Örnek 1: Yöntemi Geçersiz Kılma
class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) )
Çıktı :
Ben bir köpeğim.
Yukarıdaki programda, displayInfo()
yöntem hem Hayvan üst sınıfında hem de Köpek alt sınıfında mevcuttur.
displayInfo()
D1 nesnesini (alt sınıfın nesnesi) kullanarak çağırdığımızda , Dog alt sınıfının içindeki yöntem çağrılır. Alt displayInfo()
sınıfın yöntemi, süper sınıfın aynı yöntemini geçersiz kılar.
@Override
Örneğimizdeki ek açıklamanın kullanımına dikkat edin. Java'da ek açıklamalar, derleyiciye bilgi sağlamak için kullandığımız meta verilerdir. Burada, @Override
ek açıklama, derleyiciye bu açıklamadan sonraki yöntemin süper sınıfın yöntemini geçersiz kıldığını belirtir.
Kullanmak zorunlu değildir @Override
. Ancak, bunu kullandığımızda, yöntem tüm geçersiz kılma kurallarına uymalıdır. Aksi takdirde, derleyici bir hata oluşturacaktır.
Java Geçersiz Kılma Kuralları
- Hem üst sınıf hem de alt sınıf aynı yöntem adına, aynı dönüş türüne ve aynı parametre listesine sahip olmalıdır.
final
Ve olarak bildirilen yöntemi geçersiz kılamayızstatic
.- Her zaman süper sınıfın soyut yöntemlerini geçersiz kılmalıyız (daha sonraki eğitimlerde tartışılacaktır).
Java Geçersiz Kılmada Süper Anahtar Kelime
Java'da geçersiz kılma işlemi yapılırken ortaya çıkan yaygın bir soru şudur:
Geçersiz kıldıktan sonra süper sınıfın yöntemine erişebilir miyiz?
Cevap evet . Alt sınıftan üst sınıfın yöntemine erişmek için super
anahtar kelimeyi kullanıyoruz.
Örnek 2: Süper Anahtar Kelime kullanımı
class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) )
Çıktı :
Ben bir hayvanım Ben bir köpeğim.
Yukarıdaki örnekte, alt sınıf olan Dog displayInfo()
, Animal sınıfının yöntemini geçersiz kılar .
displayInfo()
Dog alt sınıfının d1 nesnesini kullanarak yöntemi çağırdığımızda, Dog alt sınıfının içindeki yöntem çağrılır; üst sınıfın içindeki yöntem çağrılmaz.
İçinde displayInfo()
Köpek alt sınıfının, biz kullandık super.displayInfo()
çağrısına displayInfo()
superclass.
Java'daki yapıcıların miras alınmadığını unutmamak önemlidir. Bu nedenle, Java'da kurucunun geçersiz kılması diye bir şey yoktur.
Bununla birlikte, üst sınıfın yapıcısını alt sınıflarından çağırabiliriz. Bunun için kullanıyoruz super()
. Daha fazla bilgi edinmek için Java süper anahtar kelimesini ziyaret edin.
Yöntemi Geçersiz Kılmada Belirticilere Erişim
Üst sınıfta ve alt sınıflarında bildirilen aynı yöntemin farklı erişim belirleyicileri olabilir. Ancak bir kısıtlama var.
Bu erişim tanımlayıcılarını yalnızca üst sınıfın erişim tanımlayıcısından daha büyük erişim sağlayan alt sınıflarda kullanabiliriz. Örneğin,
Üst sınıftaki bir yöntemin myClass()
bildirildiğini varsayalım protected
. Daha sonra, myClass()
alt sınıftaki aynı yöntem ya public
da olabilir protected
, ama olamaz private
.
Örnek 3: Geçersiz Kılmada Erişim Belirteci
class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) )
Çıktı :
Ben bir köpeğim.
Yukarıdaki örnekte, alt sınıf olan Dog displayInfo()
, Animal sınıfının yöntemini geçersiz kılar .
displayInfo()
D1'i (alt sınıfın nesnesi) kullanarak her çağırdığımızda , alt sınıfın içindeki yöntem çağrılır.
Hayvan üst sınıfında displayInfo()
ilan edildiğine dikkat edin protected
. Aynı yöntem, public
Köpek alt sınıfında erişim tanımlayıcısına sahiptir. Bu mümkündür çünkü public
daha büyük erişim sağlar protected
.
Soyut Yöntemleri Geçersiz Kılma
Java'da soyut sınıflar, diğer sınıfların üst sınıfı olacak şekilde oluşturulur. Ve eğer bir sınıf soyut bir yöntem içeriyorsa, onu geçersiz kılmak zorunludur.
Soyut sınıflar ve soyut yöntemlerin geçersiz kılınması hakkında daha sonraki derslerde daha fazla bilgi edineceğiz.