Inheritance (IS-A Relation) (Java)

Bir sınıf diğer bir sınıftan özellikleri metodları miras alabilir. Buna inheritance denir. IS-A Relation(ilişkisi) olarak geçer.

Çalışan sınıfı base/super class (ana class) olarak tanımlanır.

Müdür/yönetici sınıfı da subclass (alt sınıf) olarak tanımlanır ve sınıfın adı yazılırken “extends” anahtar kelimesi kullanılarak müdürün de bir çalışan olduğu gösterilmelidir.

Aşağıdaki şekilde bir inheritance (kalıtım) örneği gözükmekte. Bir şirkette admin de, fakülte çalışanı da, temizlikçi de herkes bir çalışandır. Çalışan super sınıfına her çalışanda ortak bulunan özellikleri ekleyerek, her seferinde farklı bir çalışan sınıfı yazıldığında aynı metodları veya özellikleri yazmak için uğraşmıyoruz. Bu da yazılım geliştiriciler için büyük bir özellik ve nesne yönelimli programlamanın olmazsa olmazlarındandır.

Super classdaki constructorları kullanmak için super() metodunu kullanıyoruz.

super(isim,maas,departman) ile superclass içindeki constructoru çağırıyoruz çünkü super class private access modifiere sahip.

Miras aldığımız sınıfın özelliklerinden farklı olarak da subclassta kullanabiliyoruz.

Bir programcı mevcut bir sınıftan miras alarak yeni bir sınıf oluşturmaya karar verdiğinde, bu programcı yeni sınıfın eski sınıfın “daha ​​özel bir sürümü” olduğunu söyler. Alt sınıf olarak adlandırılsa da super-classın daha gelişmiş versiyonları olabiliyor.

Bir metodu da üst classtan override etmek için super.bilgileriGoster(); şeklinde override edebiliyoruz.

Ek bir bilgi olarak da override ettiğimiz metodlarda kendi yazdığımız metodlar çalışır. (istisnalar olmadan)

Aşağıda, yukarıda verdiğim örnek olan çalışan sınıfı ve bir genel müdür sınıfının kodlarını inceleyelim ve genel müdürün de bir çalışan olduğunu kodlardan görelim.

 

 

public class Employee {
    private String name;
    private String surname;
    private double salary;

    public Employee() {
        name = "UNKNOWN";
        surname = "UNKNOWN";
        salary = 0.0;
    }

    public Employee(String name, String surname, double salary) {
        this.name = name;
        this.surname = surname;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee{" + "name=" + name + ", surname=" + surname + ", salary=" + salary + '}';
    }
    
    
    public double calculateIncome() {
        return salary;
    }
}


public class GeneralManager extends Employee {
    private int profit;
    private double percent;

    public GeneralManager() {
        super();
        profit = 0;
        percent = 0;
    }

    public GeneralManager(int profit, double percent, String name, String surname, double salary) {
        super(name, surname, salary);
        this.profit = profit;
        this.percent = percent;
    }

    public int getProfit() {
        return profit;
    }

    public void setProfit(int profit) {
        this.profit = profit;
    }

    public double getPercent() {
        return percent;
    }

    public void setPercent(double percent) {
        this.percent = percent;
    }    

    @Override
    public String toString() {
        return super.toString() + "\n" + "GeneralManager{" + "profit=" + profit + ", percent=" + percent + '}';
    }

    @Override
    public double calculateIncome() {
        return super.calculateIncome() + (profit * percent);
    }
    
    
    
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir