Ana içeriğe geç
Modül 3 · Ders 1 ders 2Kurstaki 5/14~12 min
Modül dersleri (1/2)

Miras

Kalıtım, bir sınıfın (alt sınıf veya alt sınıf olarak adlandırılır) başka bir sınıftan (ana sınıf veya üst sınıf olarak adlandırılır) alanları ve yöntemleri miras almasına izin veren temel bir OOP mekanizmasıdır.

Bu, kodun yeniden kullanımını teşvik eder ve gereksiz tekrarları önler.

Bir Sınıfı extends ile Genişletme

Java'da, bir sınıfın diğerinden miras aldığını belirtmek için extends anahtar kelimesini kullanırız:

Java
class Vehicle {
    protected int speed; // 'protected' makes the field visible to subclasses

    public void honk() {
        System.out.println("Beep beep!");
    }
}

class Car extends Vehicle {
    // Car automatically inherits the speed field and the honk() method
}

Yapıcı ve super() Anahtar Kelimesi

Üst sınıfın parametreleri kabul eden bir yapıcısı varsa, alt sınıfın onu yapıcısında ilk ifade olarak super(...) kullanarak açıkça çağırması gerekir:

Java
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }
}

class Student extends Person {
    int studentId;

    public Student(String name, int studentId) {
        super(name); // Invokes the constructor of Person
        this.studentId = studentId;
    }
}

Yöntemi Geçersiz Kılma (@Override)

Bir alt sınıf, üst sınıftan miras alınan bir yöntem için kendi özel uygulamasını sağlayabilir. Bu işleme geçersiz kılma (yöntemi geçersiz kılma) adı verilir ve @Override ek açıklamasıyla gösterilir.

Java
class Animal {
    public void makeSound() {
        System.out.println("Rumore generico");
    }
}

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

protected Değiştirici

protected erişim değiştiricisi kalıtımda önemli bir rol oynar. Üyeleri yalnızca aynı sınıf içinde görünür kılan private'den farklı olarak protected, farklı paketlerde bulunsalar bile hem aynı paket içindeki hem de tüm alt sınıflar tarafından alanlara ve yöntemlere erişime izin verir.

super ile Ana Üyelere Erişim

Üst sınıf yapıcısını çağırmanın yanı sıra, super anahtar sözcüğü alt sınıf yöntemleri içinde üst sınıfın yöntemlerine veya değişkenlerine referans vermek için kullanılabilir. Bu, özellikle bir yöntem geçersiz kılındığında kullanışlıdır ancak yine de orijinal ebeveyn davranışını çağırmak istiyorsunuz:

Java
class Animal {
    public void sleep() {
        System.out.println("Zzz");
    }
}

class Cat extends Animal {
    @Override
    public void sleep() {
        super.sleep(); // Executes the behavior of Animal
        System.out.println("The cat purrs while sleeping.");
    }
}

Java'da Tek Kalıtım

Java'da bir sınıf yalnızca bir sınıfı genişletebilir (tek kalıtım). Birden çok sınıftan doğrudan mirasa (çoklu miras) izin verilmez; örneğin, class Cat extends Animal, Mammal derleme hatasına neden olur. Bu tasarım seçimi, "elmas problemi" (iki üst sınıfın aynı yöntemi farklı uygulamalarla tanımlaması) olarak bilinen belirsizlikleri önler. Bu sınırlamanın üstesinden gelmek için Java, bir sonraki modülde inceleyeceğimiz Arayüzler kavramını sunar.


Kendin dene

Egzersiz#java.m3.l1.e1
Denemeler: 0Yükleniyor…

Animal'ı genişleterek Köpek alt sınıfını tamamlayın. Bir adı (String) kabul eden ve bunu Animal yapıcısına iletmek için super(name) kullanan Dog yapıcısını bildirin.

Düzenleyici yükleniyor…
İpucu göster

`genel Köpek(Dize adı) { süper(isim); yazın }` Dog sınıfının içinde.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m3.l1.e2
Denemeler: 0Yükleniyor…

Dog'u Animal'dan genişletin ve makeSound() yöntemini geçersiz kılarak Generic Sound yerine Woof dizesini döndürsün. @Override ek açıklamasını kullanın.

Düzenleyici yükleniyor…
İpucu göster

`public String makeSound() bildiriminin üstüne `@Override` yazın { return 'Woof'; }` Köpeğin içinde.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m3.l1.e3
Denemeler: 0Yükleniyor…

Animal'ı genişleten ve Meow dizesini döndürmek için makeSound() yöntemini geçersiz kılan bir Cat sınıfı bildirin. Animal sınıfının zaten bir adı kabul eden bir yapıcısı vardır; Cat yapıcısının da bir adı kabul ettiğinden ve onu üst sınıf yapıcısına doğru şekilde ilettiğinden emin olun.

Düzenleyici yükleniyor…
İpucu göster

'Animal'ı genişleten 'Cat' sınıfını oluşturun. Yapıcıyı bildirin `public Cat(String name) { super(name); }` ve `'Meow'` döndürmek için `@Override` kullanarak `makeSound()` yöntemini geçersiz kılın.

3 denemeden sonra çözüm mevcut