Menu
Coddy logo textTech

Metot Geçersiz Kılma (@Override)

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 22 / 87.

Metot geçersiz kılma (Method overriding), bir alt sınıfın, üst sınıfında zaten tanımlanmış olan bir metodun kendi uygulamasını sağlamasına olanak tanır. Bu, alt sınıfların kalıtımla aldıkları davranışı kendi özel ihtiyaçlarına göre özelleştirme yöntemidir.

Bir metodu geçersiz kıldığınızda (override), alt sınıf versiyonu, o alt sınıfın nesneleri için üst sınıfın versiyonunun yerini tamamen alır. Metot, üst sınıf metoduyla aynı isme ve parametrelere sahip olmalı ve dönüş türü üst sınıfınkiyle aynı (veya onun bir alt türü) olmalıdır:

public class Animal {
    public void makeSound() {
        System.out.println("Some generic sound");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow!");
    }
}

@Override anotasyonu, derleyiciye bir üst metodu geçersiz kılma (override) niyetinde olduğunuzu söyler. İsteğe bağlı olsa da, metod adını yanlış yazmanız veya yanlış parametreler kullanmanız durumunda derleyici hataları yakalayacağı için şiddetle tavsiye edilir:

@Override
public void makeSound() { }  // Doğru - derleyici bunu doğrular

public void makesound() { }  // Yazım hatası! Geçersiz kılmak yerine yeni bir metod oluşturur

Geçersiz kılınmış (overridden) bir metodu çağırdığınızda, Java gerçek nesne türüne ait olan sürümü çalıştırır:

Dog dog = new Dog();
dog.makeSound();  // Çıktı: Woof!

Cat cat = new Cat();
cat.makeSound();  // Çıktı: Meow!

Önceki dersten, yeni kodunuzla birlikte ebeveynin davranışını da dahil etmek istiyorsanız, geçersiz kılınmış bir metodun içinde super.methodName() kullanabileceğinizi hatırlayın.

challenge icon

Görev

Kolay

Alt sınıfların kendi özel davranışlarını sağlamak için üst sınıf metotlarını nasıl geçersiz kılabileceğini (override) gösteren bir bildirim sistemi oluşturalım. @Override notasyonunun hataları yakalamaya nasıl yardımcı olduğunu ve her alt sınıfın devralınan metotları nasıl özelleştirebileceğini göreceksiniz.

Kodunuzu düzenlemek için üç dosya oluşturacaksınız:

  • Notification.java: Genel bir bildirimi temsil eden üst sınıfı oluşturun. Şunlara sahip olmalıdır:
    • message (String) için özel (private) bir alan
    • Mesajı kabul eden bir yapıcı (constructor)
    • Mesajı döndüren bir getMessage() metodu
    • Şunu yazdıran bir send() metodu: Sending notification: [message]
  • EmailNotification.java: Notification sınıfını genişleten ve bildirimlerin e-posta yoluyla nasıl gönderileceğini özelleştiren bir alt sınıf oluşturun:
    • recipient e-posta adresi (String) için özel (private) bir alan
    • Hem mesajı hem de alıcıyı alan, üst sınıf kısmı için super(message) kullanan bir yapıcı
    • Şunu yazdırmak için @Override notasyonunu kullanarak send() metodunu geçersiz kılın: Emailing [recipient]: [message]
  • Main.java: Aynı metot isminin nesne türüne bağlı olarak nasıl farklı davranışlar ürettiğini gösterin. İki girdi alacaksınız: bir mesaj ve bir e-posta adresi. Aynı mesajla hem normal bir Notification hem de bir EmailNotification oluşturun, ardından farklı çıktıları görmek için her birinde send() metodunu çağırın.

İki girdi alacaksınız: mesaj (String) ve alıcı e-posta adresi (String).

Çıktınız iki satır göstermelidir - ilki üst sınıfın send() metodundan, ikincisi ise EmailNotification içindeki geçersiz kılınmış sürümden. Bu, metot geçersiz kılmanın (method overriding), alt sınıfların devralınan davranışı kendi uygulamalarıyla değiştirmesine nasıl izin verdiğini gösterir.

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String message = scanner.nextLine();
        String recipient = scanner.nextLine();
        
        // TODO: message ile bir Notification nesnesi oluşturun
        
        // TODO: message ve recipient ile bir EmailNotification nesnesi oluşturun
        
        // TODO: Notification nesnesi üzerinde send() metodunu çağırın
        
        // TODO: EmailNotification nesnesi üzerinde send() metodunu çağırın
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler