Java OOP – @override(overriding) ve Inheritance(kalıtım)

Haziran 29, 2020 0 Yazar: alikperislam

OVERRİDİNG (GEÇERSİZ KILMA) :

Java programlama dilinde bildiğimiz gibi nesne yönelimli programlama da kullanılan Inheritance(kalıtım) vardır. Kalıtımda üst sınıftan yani superclass’tan alt sınıflara yani subclass’lara miras alınabilmektedir. Miras alırken tamamıyle aynı olarak alınır başta ama biz eğer yeni özellikler katmak istiyorsak artık bu noktada devreye overriding kavramı girmektedir. Overriding kavramı alt sınıfta üste sınıftan miras aldıktan sonra değişiklikler yapmamızı sağlamaktadır.

MİRAS ALINMIŞ OLAN BİR SUBCLASS’TA TANIMLANAN BİR OVERRİDİNG ÖRNEĞİ :

@Override
public void showInfos(){
    // altta ki 3 özellik miras aldığımız özellikler.
        System.out.printline(“İsim : “+getİsim());
        System.out.printline(“Soyisim : “+getSoyisim());
        System.out.printline(“Okul : “+getOkul());
        System.out.printline(“Bölüm : “+this.bolum); // yeni eklediğimiz özellik
        }

INHERİTANCE :

Inheritance Türkçe ismiyle kalıtım. Java programlama dili nesne yönelimli bir programlama dilidir ve nesne yönelimli programlama yapabilmek içinde elverişlidir. Nesne yönelimli programlanın ana mantığı aslında kullanılacak bir objeyi bir defa tanımlayıp gerekli işlemleri yapıp daha sonra büyük projelerde istenilen yerde tekrardan o objeyi türeterek kullanabilmektir. Yani nyp aslında büyük projelerde çok kullanışlı bir yağıya sahiptir. Bu yapının en önemli halkası ise kalıtım dediğimiz Inheritance’dır. Kalıtım sayesinde bir ana sınıftan (superclass), sınırsız alt sınıflara (subclass) aktarım vardır. Aktarım tamammiyle aynı olabileceği gibi override vs… ile eklemeler de yapılabilmektedir. Her alt sınıf bir super anasınıfa sahip olabilmektedir.

Inheritance ile yazdığım bir kod örneği :

SUPERCLASS —–>

package javadersleri.OOP_Inheritance_kalıtım;
// başka bir sınıftan miras alma vardır.
// İS-A ilişkisi vardır aralarında.
// çalışan class’ı baseClass veya SuperClass olarak tanımlanır yani ana class’tır.
public class çalışan {
    // çalışanların alacağı özelliklerini girdik
    private String isim;
    private String departman;
    private double maas;

    public çalışan(String isim,String departman,double maas){
        // constructer fonksiyonumuzu tanımladık.
        this.isim=isim;
        this.departman=departman;
        this.maas=maas;
    }

    public void bilgileri_goster(){
        // bilgi fonksiyonumuzu tanımlamış olduk.
        System.out.println(“isim : “+isim+”\nDepartman : “+departman+”\nMaaş : “+maas);
    }

    public void calısan(){
        // örnek bir fonksiyon tanımladık.
        System.out.println(“Çalışanlar işe başladılar…”);
    }

    public void departman_degis(String yeni_departman){
        // fonksiyon tanımlayarak değişiklik yapalım herhangi bir özellikte.
        System.out.println(“Departman değiştiriliyor…”);
        this.departman=yeni_departman;
        System.out.println(“Yeni departman : “+yeni_departman);
    }

    public void maas_azalt(double azalt){
        maas-=azalt;
        System.out.println(“Maaş : “+maas+”\nAzalan maaş : “+azalt);
    }

    // isim özelliğinin getter setter’ı
    public void setIsim(String isim){
        this.isim=isim;
    }
    public String getIsim(){
        return isim;
    }
    // departman özelliğinin getter setter’ı
    public void setDepartman(String  departman){
        this.departman=departman;
    }
    public String getDepartman(){
        return departman;
    }
    // maas özelliğinin getter setter’ı
    public void setMaas(double maas){
        this.maas=maas;
    }
    public double getMaas(){
        return maas;
    }
}

 SUBCLASS —–>

package javadersleri.OOP_Inheritance_kalıtım;
public class yönetici extends çalışan { // miras almak için extends anahtarını kullanarak classı yazmalıyız ilk…
    // public class subclass ismi extends superclass ismi{} bu şekilde miras almak için tanımlıyoruz ilk.

    private int sorumlu_kisi; // extra özellik tanımlamış olduk subclass’ın içerisine.

    // yönetici classı bir alt class’tır bu yüzden subClass olarak tanımlanır.
    // miras alacağız çalışan class’ından

    //daha sonra ise bu classın constructer fonksiyonunu tanımlamalıyız ve içine alacağımız özellikleri girmeliyiz.

    public yönetici(String isim, String departman, double maas,int sorumlu_kisi){//extra özelliği burayada tanımladık.

        //daha sonra bu costructer fonksiyonunun içinde super(); anahtarını kullanarak superclass ta ki constructer
        // fonksiyonunu miras olarak almalıyız tabi ki içine alacağımız özellikleri de giriyoruz.

        super(isim,departman,maas);

        //Çalışanlar class’ından miras alırız bu mirası kullanabiliriz fakat miras alan class yani yönetici class’ında
        //istediğimiz kadar geliştirmeler yapabiliriz.
        // özellik ekleyelim dersek eğer bu class  ta private olarak tanımlayıp daha sonra miras alınan constructer’a
        // tanımlayıp ve en sonda da super() anahtarının altına ekleyebiliyoruz…

        this.sorumlu_kisi=sorumlu_kisi; // en son olarakta bu class’ın constructer fonksiyonuna  tanımlamayı yaptık.
        // daha sonra test.java’nın içerisine de bununla ilgili bir değer giremiz gerekecek.
    }

    public void zam_yap(double zam){
        // fonksiyon tanımlayabiliyoruz subclass’ın içerisine.
        System.out.println(“Zam yapılıyor…”);
        System.out.println(“Çalışanlara “+zam+” tl zam yapıldı.”);
    }
    public void kisi_arttır(int artı_kisi){
        System.out.println(“Sorumlu kişi sayısı artırılıyor…”);
        this.sorumlu_kisi+=artı_kisi;
        System.out.println(“Yeni sorumlu kişi sayısı : “+sorumlu_kisi+”\nEklenen kişi sayısı : “+artı_kisi);
    }

    /////////////////////////////////////////////////
    // inheritance’da methodlarda overloading yapabiliriz diğer classta ki bir methodu burda da tanımlayabilir ve
    // üzerinde eklemeler yapabiliriz mesela ;
    // not —–> bilgiler fonksiyonunu overloading yapınca burası artık çalışır ve diğeri iptal olmuş olur…
    public void bilgileri_goster(){
        /*System.out.println(“isim : “+getIsim()+”\nDepartman : “+getDepartman()+”\nMaaş : “+getMaas()+
                “\nSorumlu olduğu kişi sayısı : “+this.sorumlu_kisi);*/
        // burda srumlu kişi sayısını direk alabiliyorken
        // maas departman ve isim gibi bilgileri girmek için getter fonksiyonalrını kullnamamız gerekmektedir.


        // Bunların yerine tamamen daha kolay ve el verişli bir şekilde super() anahtarını
        // kullanacğız yine fonksiyonda da. bu şekilde kullanınca superclassta ki fonksiyon iptal olmuyor
        // ama aynı zamanda burdaki özelliğide ekleyebiliyoruz fonksiyona

        super.bilgileri_goster(); // bilgileri_goster fonksiyonunu aldık ve altta eklemesini yaptık.
        System.out.println(“Sorumlu kişi sayısı : “+this.sorumlu_kisi); // yine aynı şekilde çalışacaktır.
    }
}