Abstract Class ve Interface Farkı Nedir?
Abstract class (soyut sınıf) ve interface (arayüz), nesne yönelimli programlamada kullanılan iki farklı yapının temsil ettiği kavramlardır…
Abstract Class ve Interface Farkı Nedir?
Abstract class (soyut sınıf) ve interface (arayüz), nesne yönelimli programlamada kullanılan iki farklı yapının temsil ettiği kavramlardır. İkisi de benzer amaçları taşısa da farklı kullanım senaryolarına sahiptirler.
İşte bu iki yapının temel farkları:
Abstract Class (Soyut Sınıf):
- Abstract class, tamamlanmış (implemente edilmiş) ve tamamlanmamış (implemente edilmemiş) metotları içerebilen bir sınıf türüdür.
- Soyut sınıflar, hem alanlar (fields) hem de metotlar içerebilir. İçinde işlevsel kodlar da bulundurabilir.
- Sadece bir tane soyut sınıfı miras alabiliriz.
- İlgili sınıfın genel yapısını ve ortak özelliklerini belirlemek için kullanışlıdır.
abstract class Sekil
{
public abstract double AlanHesapla();
public void BilgiGoster()
{
Console.WriteLine("Bu bir şekildir.");
}
}
Interface (Arayüz):
- Interface, yalnızca metot bildirimleri (imzaları) içeren bir yapıdır. Metotların işlevsel kodları arayüzde bulunmaz.
- Bir sınıf, birden fazla arayüzü uygulayabilir (implemente edebilir).
- Arayüzler, farklı sınıflar arasında genel bir anlaşma sağlamak ve belirli metotları taşıyan sınıflar oluşturmak için kullanılır.
interface ISekil
{
double AlanHesapla();
}
Farklılıklar özetle şu şekildedir:
- Abstract class, tamamlanmış ve tamamlanmamış metotlarla birlikte işlevsel kodları içerebilirken, interface sadece metot bildirimleri içerir.
- Sınıf yalnızca bir tane soyut sınıfı miras alabilirken, birden fazla arayüzü implemente edebilir.
- Soyut sınıf, bir şablon veya ortak bir özellikleri belirlemek için kullanılırken, arayüz, farklı sınıflar arasında genel bir anlaşma sağlamak ve belirli metotları taşıyan sınıflar oluşturmak için kullanılır.
Örnek 1: Diyelim ki bir oyun geliştiriyoruz ve farklı karakter sınıfları oluşturmanız gerekiyor. Karakterlerin bazı ortak özellikleri (ad, sağlık durumu, saldırı gücü) bulunuyor, ancak her karakter farklı şekilde saldırı yapabiliyor.
İşte burada Abstract Class ve Interface kullanımı:
// Abstract Class
abstract class Karakter
{
public string Ad { get; set; }
public int Saglik { get; set; }
public int SaldiriGucu { get; set; }
public abstract void Saldir();
}
// Interface
interface ISaldirabilir
{
void Saldir();
}
class Asker : Karakter, ISaldirabilir
{
public override void Saldir()
{
Console.WriteLine("Asker saldırı yapıyor!");
}
}
class Okcu : Karakter, ISaldirabilir
{
public override void Saldir()
{
Console.WriteLine("Okçu saldırı yapıyor!");
}
}
Burada “Karakter” adında bir abstract sınıf ve “ISaldirabilir” adında bir arayüz (interface) bulunuyor. Her iki yapı da “Saldir” adında bir metot içeriyor. “Asker” ve “Okcu” adında iki farklı karakter sınıfı, hem “Karakter” sınıfını miras alıyor hem de “ISaldirabilir” arayüzünü implemente ediyor.
Örnek 2: Diyelim ki bir uygulama geliştiriyorsunuz ve farklı veritabanlarına bağlanmanız gerekiyor. Farklı veritabanları için bağlantı yöntemleri farklı olabilir.
İşte burada Interface kullanımı:
interface IVeritabaniBaglantisi
{
void Baglan();
void VeriCek();
}
class SqlServerBaglantisi : IVeritabaniBaglantisi
{
public void Baglan()
{
Console.WriteLine("SQL Server veritabanına bağlanılıyor.");
}
public void VeriCek()
{
Console.WriteLine("Veri SQL Server'dan çekiliyor.");
}
}
class MySqlBaglantisi : IVeritabaniBaglantisi
{
public void Baglan()
{
Console.WriteLine("MySQL veritabanına bağlanılıyor.");
}
public void VeriCek()
{
Console.WriteLine("Veri MySQL'den çekiliyor.");
}
}
Burada “IVeritabaniBaglantisi” adında bir arayüz (interface) bulunuyor ve farklı veritabanları için bağlantı metotları içeriyor. “SqlServerBaglantisi” ve “MySqlBaglantisi” adında iki farklı sınıf bu arayüzü implemente ederek farklı veritabanlarına bağlanma işlemlerini gerçekleştiriyor. Bu sayede farklı veritabanlarına bağlanmak için aynı arayüzü kullanabiliriz.
Okuduğunuz için Teşekkürler :)
dxtaner (Taner Özer) https://medium.com/@dxtaner Taner Özer | LinkedIn
메타데이터
- post_id
- 8f4a45fe7f59
- slug
- abstract-class-ve-interface-farkı-nedir-8f4a45fe7f59
- url
- https://medium.com/@dxtaner/abstract-class-ve-interface-fark%C4%B1-nedir-8f4a45fe7f59
- canonical_url
- https://medium.com/@dxtaner/abstract-class-ve-interface-fark%C4%B1-nedir-8f4a45fe7f59
- author_url
- https://medium.com/@dxtaner
- status
- ok
- fetched_at
- 2026-08-04 01:08:49