Java OOP günlükleri - 7 Interface(Arayüz) ve Abstract sınıflar

Bir çok dili temel ve orta seviyede biliyorum. Java da temel bildiğim dillerden bir tanesi. Java'yı yıllardır bilmeme rağmen OOP konusunda takılıp/kendimi çok geliştirmeden kaldım. Bu blog'da bildiğim ve yeni öğrendiğim şeyleri kodları ile beraber sizlerle paylaşacağım.

Merhabalar bundan önceki yazımda çok biçimilikten bahstemiştim. Bu yazımda ise Java'da interfacelerden ve abstract sınıflardan bahsedeceğim. Kendisi çok zor görülmesine rağmen çok kısa ve pratik bir konudur. Interface ile başlayalım. Interface nedir?


1597495887950.png


Interface tanımlaması class tanımlamasına çok benzer bir tanımlamadır. Sınıflardan farklı yanı interfacelerden normal bir sınıfta olduğu gibi new() operatörü ile bir nesne oluşturulamaz. Örnek olarak interface kullanımı:


Java:
pubilc interface arayüzüm{
    void gövdesizmetod();
}

Interfaceler sınıfa bağlanırlar, bağlı olduğu sınıfların hangi metodları içermesi gerektiğini belirlerler. Bir sınıfa interface bağlamak istersek "implements" keyword'unu kullanırız. Örnek kod yazacak olursak:

Java:
public interface arayuzum{
    void yazdir();
}

Yukarıdaki kod bizim interfacemiz. Bu interface'e bağlı bir sınıf üretelim.

Java:
class insan implements arayuzum{
    public void yazdir(){
        System.out.println("Ben bir insanım!");
    }
}
class kuş implements arayuzum{
    public void yazdir(){
        System.out.println("Ben bir kuşum!");
    }
}
public class main {
    public static void main(String[] args) {
        kuş kuş = new kuş();
        insan insan = new insan();
        kuş.yazdir();
        insan.yazdir();
    }
}

Program çıktı olarak sıra ile Ben bir kuşum!, Ben bir insanım! verdi. Sınıflarda Interface'nin içindeki metodları sınıflarda kullanmak zorunda olduğumuzdan eğer ki bu metodları kullanmazsak java bize hata verecektir.

Peki bu yaptığımız işlem ne işe yaradı? Bundan önceki yazımda polimorfizimden bahsetmiştim. Biraz bu konu ile de alakalı. Örnek ile açıklayayim.

Java:
public interface arayuzum{

    void yazdir();

}

Yukarıdaki örnek ile aynı interface tanımladım.

Java:
class insan implements arayuzum{
    public void yazdir(){
        System.out.println("Ben bir insanım!");
    }
}
class kuş implements arayuzum{
    public void yazdir(){
        System.out.println("Ben bir kuşum!");
    }
}

public class main {

    public static void yazdir2(arayuzum arayuz){  //Arayüz tipinden değişkeni parametre olarak alan bir metod yazdım.
        arayuz.yazdir();
    }
    public static void main(String[] args) {
     
        kuş kuş = new kuş();
        insan insan = new insan();

       yazdir2(insan); // Metodları çalıştırdım.
       yazdir2(kuş); // Metodları çalıştırdım.

    }
}

Program çıktı olarak sıra ile Ben bir insanım!, Ben bir kuşum! verdi.

Interface konusunu bu kadar. Biz bir arayüz ve arayüzün referansı sayesinde kodumuzda pratiklik elde etmiş oluyoruz.

Abstract sınıflar da Interface metodlara benzer. Aynı şekil abstract sınıfları kendimize göre yazmak zorundayız. Yukarıdaki örneği Abstract sınıflar ile yapacak olursak:

Java:
public abstract class Abstract{
    void yazdir();
}

Java:
class insan extends Abstract{
    public void yazdir(){
        System.out.println("Ben bir insanım!");
    }
}
class kuş extends Abstract{
    public void yazdir(){
        System.out.println("Ben bir kuşum!");
    }
}

public class main {

    public static void yazdir2(Abstract abstract1){
        abstract1.yazdir();
    }
    public static void main(String[] args) {
     
        kuş kuş = new kuş();
        insan insan = new insan();

       yazdir2(insan);
        yazdir2(kuş);
    }
}

Program çıktı olarak sıra ile Ben bir insanım!, Ben bir kuşum! verdi.

Abstract sınıftan da herhangi bir obje oluşturamayız, Abstract sınıfların tek farklı kendi içinde gövdeli sınıf barındırabilir ve bizim bunları tekrardan tanımlamamız gerekmez. Örnek:

Java:
public abstract class Abstract{
    void yazdir(){
        System.out.println("Ben bir varlığım!");
    }
}

Yukarıda tanımladığım abstract sınıf içinde gövdeli metod barındırıyor.

Java:
class insan extends Abstract{
}
class kuş extends Abstract{
}

public class main {

    public static void yazdir2(Abstract abstract1){
        abstract1.yazdir();
    }
    public static void main(String[] args) {
     
        kuş kuş = new kuş();
        insan insan = new insan();

       yazdir2(insan);
        yazdir2(kuş);
    }
}

Yukarıdaki sınıflar içinde herhangi bir metod barındırmıyor. Program çıktı olarak sıra ileBen bir varlığım!, Ben bir varlığım! verdi.

Bu yazımın da sonuna geldim. Araştırıp öğrendiklerimi yazmaya devam edeceğim.

Görsel:

  • java(.png
    java(.png
    18,5 KB · Görüntüleme: 208
Yazar hakkında
Furkaninkosesi
Bilgisayar ile 2 yazılım ile 10 yaşında tanışan biri.

Yorumlar

C ve C++ dillerinde kod yazarken kütüphane kullanma zorunluluğu beni dilden soğuttu. Ben C ve C++ dillerini öğrenmek istiyorum kütüphaneyi değil. Java'da o sıkıntıdan pek yok. Java'nın kendisine ait her zaman import edilen bir kütüphane var içindeki diğer kütüphanelerle birlikte de ekosistem oluşturuyor.
 
C ve C++ dillerinde kod yazarken kütüphane kullanma zorunluluğu beni dilden soğuttu. Ben C ve C++ dillerini öğrenmek istiyorum kütüphaneyi değil. Java'da o sıkıntıdan pek yok. Java'nın kendisine ait her zaman import edilen bir kütüphane var içindeki diğer kütüphanelerle birlikte de ekosistem oluşturuyor.
O olaylar beni de çok sinir edebilir kesin.
Siz de bir ara Python bakın bence, ben de pek iyi sayılmam ama eğlenceli ve kolay olduğu aşikar :D. İleride işinize yarayabilir belki.
 

Blog girdisi detayları

Ekleyen
Furkaninkosesi
Okuma süresi
2 dakika okuma
Görüntüleme
1.725
Yorumlar
5
Son güncelleme

Yazılım kategorisindeki diğer girdiler

Furkaninkosesi adlı kullanıcının diğer girdileri

Bu girdiyi paylaş

Geri
Yukarı