Java Eğitimleri 27 – Java’da Kalıtım(Inheritance)

Herkese merhaba. Bugünkü eğitim yazımızda kalıtım konusuna değineceğiz. Nedir bu kalıtım?

 

Kalıtım(inheritance) kullanımları, sınıflar arası bağlantıyı sağlar diyebiliriz ancak bu kalıbın diğer bağlantılardan farkı var. Kalıtım olarak bağladığımız sınıf diğer sınıfın alt sınıfı(subclass), diğer sınıf ise süper sınıf(superclass ya da baseclass) olarak adlandırılır. Her alt sınıf, süper sınıfın özelliklerini taşır ve süper sınıfın metodlarını ve değişkenlerini alt sınıfta kullanabilmek mümkündür. Süper sınıftan alınan bazı özellikler alt sınıfta farklı kodlar yazılarak değiştirilebilir.

 

Örneğin; deneme adlı bir sınıfımız var ve biz, deneme sınıfında kullandığımız kodları uygulama adlı sınıfımızda kullanmak istiyoruz. Bunu nasıl yapabiliriz?

public class Deneme { 
    
}

 

Deneme sınıfımızdaki değişkenleri bu şekilde oluşturduk. Şimdi, uygulama sınıfımızda kalıtımı gerçekleştirelim.

public class Uygulama extends Deneme{

}

Buradaki extends deyimi; deneme adlı sınıfımıza ait özellikleri, uygulama sınıfımızda kullanabilmemizi sağlar. Buna göre alt sınıf(subclass) uygulama adlı sınıfımız, süper sınıf(superclass) ise deneme adlı sınıfımızdır.

 

NOT: Eğer süper sınııfımız bir yapılandırıcı içeriyorsa , alt sınıfta oluşturulan extends deyimi hata verecektir. Bu hata şu şekilde düzeltilebilir:

 

Deneme sınıfında oluşturduğumuz kodlar:

public class Deneme {

    
    private int sayi;
    private String yazi;
    private String metin;
    
    
    public Deneme(int sayi, String yazi, String metin) {
        
        this.sayi = sayi;
        this.yazi = yazi;
        this.metin = metin;
    }
    
    
    
}

 

Bu kodlar, uygulama sınıfında hata göstermesine neden olacaktır.

 

Bu hata, deneme sınıfımızda tanımladığımız private değişkenler nedeniyle oluşur. Bu hatayı düzeltmek için yapılandırıcı oluşturabiliriz ancak tüm değerleri tanımlandığı gibi alabilmemiz için super deyimini kullanmamız gerekecektir.

 

public Uygulama(int sayi, String yazi, String metin) {
        
        super(sayi, yazi, metin);
        
    }

 

Tüm bunları tek tek yazmak yerine Java bu hatayı, hata işaretine bastığımızda düzeltebiliyor.

 

Bu işlemleri de yaptığımızda aynı kodlar editör ekranımızda oluşacaktır.

 

Bir örnek çözelim.

3 sınıf oluşturacağız bu örneğimizde: text,calisan ve yonetici sınıfları. Calışan sınıfımız superclass, yonetici sınıfımız da subclass olacak. Text sınıfımızı da oluşturduğumuz kodları, konsola yazdırabilmek için oluşturduk. O halde başlayalım.

Calisan sınıfımızdaki kodlar:

public class Calisan {

    
    private String isim;
    private int maas;
    private String departman;
    
    
    public Calisan(String isim, int maas, String departman) {
        
        this.isim = isim;
        this.maas = maas;
        this.departman = departman;
    }
    
    public void calis(){
        
        System.out.println("Çalışan Sınıfı Çalışıyor...");
    }
    
    public void BilgileriGoster(){
        
        System.out.println("İsim : " + isim);
        System.out.println("Maaş : " + maas);
        System.out.println("Departman : " + departman);
        
    }
    
}


 

 

Yonetici sınıfımızdaki kodlar:

public class Yonetici extends Calisan {
    
    

    public Yonetici(String isim, int maas, String departman) {      
        
        super(isim, maas, departman);   
        
        
    }
    
    public void Zam_Yap(int zam){
        
        System.out.println("Çalışanlara " + zam + " TL Zam Yapıldı.");
        
    }
    
    
    
}


Text sınıfımızdaki kodlar:

  public static void main(String[] args) {
        
        
        Yonetici y = new Yonetici("Ali",2500, "IT");
        y.BilgileriGoster();
        y.Zam_Yap(500);
        
        
        

    }

}

 

Çıktımız:

 

 

Görüldüğü gibi calisan adlı sınıfımızdaki değişkenleri kullanarak yonetici sınıfında kodlarımızı oluşturduk. Peki calisan adlı sınıfımızda tanımlamadığımız ama yonetici sınıfında kullanmak istediğimiz değişkenleri nasıl tanımlarız?

Aynı örnek üzerinden devam edelim ve yonetici sınıfına değişken ekleyelim.

 

public class Yonetici extends Calisan {
    
    private int calisan_sayisi;
    
    

    public Yonetici(String isim, int maas, String departman,int calisan_sayisi) {   
        
        super(isim, maas, departman);   
        this.calisan_sayisi = calisan_sayisi;
        
        
    }
    
    public void Zam_Yap(int zam){
        
        System.out.println("Çalışanlara " + zam + " TL Zam Yapıldı.");
        
    }
    
    public void BilgileriGoster(){
        
        super.BilgileriGoster();
        System.out.println("Çalışan Sayısı : " + calisan_sayisi);
        
        
    }


    
    
    
}

 

Bu durumda sadece yonetici ve text sınıfında değişiklikler yapmış olduk. Text sınıfı:

public class Text {

    public static void main(String[] args) {
        
        
        Yonetici y = new Yonetici("Ali",2500, "İnsan Kaynakları", 150);
        y.BilgileriGoster();
        y.Zam_Yap(500);
        
        
        

    }

}

 

 

Çıktımız:

 

 

Subclass’a değişken eklediğimizde de yukarıdaki gibi yapabiliriz. Subclass’ta tanımladığımız BilgileriGoster() metodumuzda da super deyiminden yararlandık. System.out.println yardımıyla yazdırmak isteseydik eğer hata verecekti(Calisan adlı sınıfta private olarak tanımlandıkları için). Bu hatayı düzeltmek için de setter getter metodlarını kullanabilirdik.

 

public void BilgileriGoster(){
        
        System.out.println("İsim : " + this.getIsim());
        System.out.println("Maaş : " + this.getMaas());
        System.out.println("Departman : " + this.getDepartman());
        System.out.println("Çalışan Sayısı : " + calisan_sayisi);
        
        
    }

 

NOT: Eğer kodları bu şekilde yazmak istersek, superclass’ta getter setter metodlarını oluşturmamız gerekecektir.

 

Kalıtım deyimlerini böylelikle tamamlamış olduk. Umarım faydalı olmuştur. Sorularınız için bana neslihannsezer@gmail.com mail adresimden ulaşabilirsiniz. İyi çalışmalar 🙂

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: