1~

Minter Coder's Blog

Ders 37 - Kalıtım/Inheritance 4

2021-04-24

1)Overriding a method

Bir methodu ezme.Bu olay nasıl oluyor ? Öncelikle bu olayın olabilmesi için parent classımızın içerisinde bir method olması gerek ve eğer ki biz bu methodu child classımızda da kullanırsak bu methodu ezmiş oluruz.Hemen şöyle ki ;

public class Animal{
    public String getType(){
        return "Animal Type ";
    }
}
class Hippo extends Animal{
    @Override
    public String getType(){
        return "Hippo";
    }
}

Yukarıda da görüldüğü gibi getType adlı methodumuzun aynısını Hippo classımızda da tanımladık ve geri dönüş değerini de görebiliyoruz.Bu olaya overriding diyoruz , ve bunun için de isterseniz @Override annotationunu kullanabilirsiniz.

Bu override edilen methodun özelliklerinden bir kaçı şu olmalı , getType() methodundan yola çıkalım , bunun access modifieri(public) protected olabilir ve bunu yine alt method da override edebiliriz.Hippo classında protected yada public olarak getType() olmalı onun dışında private access modifier olursa overriding olmaz.Örnekler ;

public class Animal{
    private String getType(){
        return "Animal Type ";
    }
}
class Hippo extends Animal{
    public String getType(){
        return "Animal Type ";
    }
}

buradaki Hippo classının içerisindeki getType methodu override olmadı . Bu artık kendine ait oluşturduğu bi method fakat biz override etmek istiyoruz , o zaman animal classının içindeki methodun access modifieri public yada protected olmak zorunda.

public class Animal{
    protected String getType(){
        return "Animal Type ";
    }
}
class Hippo extends Animal{
    @Override
    public String getType(){
        return "Animal Type ";
    }
}

Görüldüğü gibi getType() methodu protected Animal classı içinde , ve biz bunu Hippo classı içerisinde ezebildik.

Overriding özellikleri;
1)Öncelikle child sınıftaki methodu parent classtaki method ile aynı signatureye sahip olması gerekiyor.

Method signature : Methodun ismi ve parametre türleri.

Yani siz böyle yaparsanız hata ile karşılaşırsınız.

public class Animal{
    protected String getType(String x){
        return "Animal Type ";
    }
}
class Hippo extends Animal{
    @Override
    public String getType(){
        return "Animal Type ";
    }
}

getType() Hippo classı içerisindeki de String türünden bir type almalı.

2)Child sınıfındaki method en azından parent classın access modifierinden daha fazla accessible olması gerekiyor.Yani parentde ki methodun access modifieri public ise childdaki public olmalı.Parent de private ise override olmaz.Parent de protected ise child da ya public yada protected olmak zorunda(farklı packagelerde iseler , eğer ki aynı paketlerde iseler default access modifierine de sahip olabilirler).