Abstract Class vs Interface

Mehmet Bilgil
3 min readOct 8, 2019

--

Abstraction = Soyutlama

Nesneye yönelimli programlamadaki en önemli kavramlardan birisi de soyutlamadır. Büyük ve kapsamlı program birçok sistem parçası ile mesajlaşarak çalışmaktadır.Sistemin detaylarına odaklanmak yerine input ve outputlarına bakmak sistemi daha net anlamamıza olanak sağlar. Javada soyutlama abstract class (soyut sınıflar) ve interface (arayüzler) aracılığıyla yapılır.

Abstract Class

Abstract class, ortak özellikleri olan nesneleri bir çatı altında toplamak için kullanılır:

  • Sınıfın önüne “abstract” sözcüğü yazılarak soyutlaştırma işlemi yapılır. Abstract sınıftan kalıtım almak için de “extends” kullanılır.
  • Abstract class önüne virtual yazılmaz çünkü default sanal olarak gelirler.
  • Genellikle Base Class tanımlamak için kullanılan ve soyutlama yeteneği kazandıran sınıflardır.
  • Abstract class, is-a ilişkilerinde kullanılır:

Örnek : “ Volkswagen” is-a Car” = Volkswagen bir arabadır ve arabanın sahip olduğu tüm özelliklerini taşır.

Car = Abstract Class

Volkswagen = Car sınıfından inherit(kalıtım) alarak bu sınıfa ait tüm ortak özelliklere sahip olur.

  • Bir class sadece bir abstract class implement edebilir.
  • “new” ile oluşturulamaz.
  • Abstract sınıfta metot ve değişkenler tanımlanabilir :

Örnek:

Abstract class üzerinde kullanılan access modifiers :

  • public
  • static
  • final

Interface

Nesne yönelimli programlamadaki karşılığı metot ve property listesidir.

interface Pet{
public void test();
}
class Dog implements Pet{
public void test(){
System.out.println("Interface Method Implemented");
}
public static void main(String args[]){
Pet p = new Dog();
p.test();
}
}
  • Interface içerisinde yalnıza method tanımları bulunur. İçerisine kod parçacığı yazılmaz.
  • Interface başka bir interfaceden inherit olabilir.
  • Interfaceler genelde “can-do” ilişkisine göre çalışır.
  • new” ile oluşturulamaz.
  • Bir sınıf birden fazla interface implement edebilir.
  • Interface içerisine yalnızca boş metot tanımlanabilir.
  • Interface içerisinde özellik ve metodlarda erişim belirleyiciler kullanılmaz. Her şey public kabul edilir.

Örnek:

Abstract Class vs. Interface

1-) Bir sınıf birden fazla interface’i inherit olarak alabilir ama bir sınıfa bir tane abstract class inherit alınabilir.

2-) Interface içerisinde boş metodlar tanımlanabilir ama abstract class’larda hem boş metodlar tanımlanabilir hemde içi dolu metodlar tanımlabilir.

3-) Abstract classları kullanmak hız açısından avantaj sağlar.

4-) Interface de yeni bir metod yazdığımız zaman bu interfaceden implement ettiğimiz tüm classlarda bu metodun içini tek tek doldurmak gerekiyor ancak abstract classlarda durum farklıdır burada bir metod tanımlayıp içini doldurduğumuzda abstract sınıfımızdan türetilmiş bütün sınıflar bu özelliği kazanmış olur.

5-) Interfaceler çoklu kalıtımı sağlamaya yardımcı abstract classlar ise çoklu kalıtımı desteklemez.

6-) Interface içerisindeki tüm nesnelerin “public” olması gerekirken Abstract classlarda tüm öğelerin “public” olması zorunlu değildir.

7-) Interface yapıcı metodlar(constructor) içermez. Abstract class yapıcı metodlar içerebilir.

8-)Interface metodlar static olamaz. Abstract class soyut olmayan metodlar static olarak tanımlanabilir.

Source:

--

--