Menu
Coddy logo textTech

super Anahtar Kelimesi

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

super anahtar kelimesi, bir alt sınıfın kendi üst sınıfına referans vermesi için bir yol sağlar. Bir alt sınıfın içinden üst sınıf üyelerine veya yapıcılarına (constructors) erişmeniz gerektiğinde bu gereklidir.

super anahtar kelimesinin en yaygın kullanımı, üst sınıfın yapıcısını (constructor) çağırmaktır. Bu, alt sınıf yapıcısındaki ilk ifade olmalıdır:

public class Vehicle {
    private String brand;
    
    public Vehicle(String brand) {
        this.brand = brand;
    }
    
    public String getBrand() {
        return brand;
    }
}

public class Car extends Vehicle {
    private int doors;
    
    public Car(String brand, int doors) {
        super(brand);  // İlk satır olmalıdır
        this.doors = doors;
    }
}

Üst sınıf metotlarını çağırmak için super anahtar kelimesini de kullanabilirsiniz; bu, özellikle alt sınıfın aynı ada sahip bir metodu olduğunda kullanışlıdır:

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

public class Cat extends Animal {
    public void makeSound() {
        super.makeSound();  // Animal versiyonunu çağırır
        System.out.println("Meow!");
    }
}

super anahtar kelimesini this anahtar kelimesinin zıttı olarak düşünün. this mevcut nesneye atıfta bulunurken, super o nesnenin üst sınıf kısmına atıfta bulunur. Bu ayrım, alt sınıfların üst sınıf davranışını tamamen değiştirmek yerine genişletmesi gereken sınıf hiyerarşileri oluştururken kritik hale gelir.

challenge icon

Görev

Kolay

Alt sınıfların üst sınıf yapıcılarını çağırmak ve üst sınıf metot davranışını genişletmek için super anahtar kelimesini nasıl kullanabileceğini gösteren bir beyaz eşya sistemi oluşturalım.

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

  • Appliance.java: Herhangi bir ev aletini temsil eden üst sınıfı oluşturun. Şunlara sahip olmalıdır:
    • Aletin brand (String) bilgisi için özel (private) bir alan
    • wattage (int) bilgisi için özel (private) bir alan
    • Her iki değeri de kabul eden ve bunları başlatan bir yapıcı (constructor)
    • Markayı döndüren bir getBrand() metodu
    • Watt değerini döndüren bir getWattage() metodu
    • Şu formatı döndüren bir getInfo() metodu: [brand] - [wattage]W
  • WashingMachine.java: Appliance sınıfını genişleten bir alt sınıf oluşturun. Bir çamaşır makinesi, bir ev aletinin sahip olduğu her şeye ve ek olarak kendi özel özelliklerine sahiptir:
    • Kg cinsinden yük kapasitesini temsil eden capacity (int) için özel (private) bir alan
    • Marka, watt ve kapasite değerlerini alan bir yapıcı - üst sınıf kısmını başlatmak için super(brand, wattage) kullanın, ardından kapasiteyi ayarlayın
    • Kapasiteyi döndüren bir getCapacity() metodu
    • Üst sınıfın getInfo() metodunu super.getInfo() kullanarak çağıran ve şunu döndürecek şekilde genişleten bir getInfo() metodu: [parent info], Capacity: [capacity]kg
  • Main.java: Bir WashingMachine nesnesi oluşturun ve tam bilgilerini görüntüleyin. Üç girdi alacaksınız: marka (String), watt (int) ve kapasite (int). Çamaşır makineniz üzerinde getInfo() metodunu çağırmanın sonucunu yazdırın.

Üç girdi alacaksınız: marka adı, watt ve kapasite.

Burada super anahtar kelimesinin iki amaca nasıl hizmet ettiğine dikkat edin: kalıtım alınan alanları başlatmak için üst sınıf yapıcısını çağırmak ve üst sınıfın metodunu tamamen değiştirmek yerine onun davranışının üzerine ekleme yapmak için çağırmak.

Kopya kağıdı

super anahtar kelimesi, bir alt sınıfın içinden üst sınıfa (parent class) başvurur.

Üst sınıfın yapıcısını (constructor) çağırmak için super() kullanın. Bu, alt sınıf yapıcısındaki ilk ifade olmalıdır:

public class Vehicle {
    private String brand;
    
    public Vehicle(String brand) {
        this.brand = brand;
    }
}

public class Car extends Vehicle {
    private int doors;
    
    public Car(String brand, int doors) {
        super(brand);  // İlk satır olmalı
        this.doors = doors;
    }
}

Üst sınıf metotlarını çağırmak için super.methodName() kullanın; bu, alt sınıf bir metodu geçersiz kıldığında (override) kullanışlıdır:

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

public class Cat extends Animal {
    public void makeSound() {
        super.makeSound();  // Animal versiyonunu çağırır
        System.out.println("Meow!");
    }
}

super bir nesnenin üst sınıf kısmına atıfta bulunurken, this mevcut nesneye atıfta bulunur.

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String brand = scanner.nextLine();
        int wattage = scanner.nextInt();
        int capacity = scanner.nextInt();
        
        // TODO: Girdi değerleri ile bir WashingMachine nesnesi oluşturun
        
        // TODO: Çamaşır makinesi üzerinde getInfo() metodunu çağırmanın sonucunu yazdı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