interface vs abstract
interface ve abstract class arasındaki farkı ve ne zaman hangisini kullanacağını öğrenirsin.
interface ve abstract class farkı
abstract class (soyut sınıf), new ile doğrudan örneklenemeyen ve abstract methodlar (gövdesiz) içerebilen sınıftır. Alt sınıflar bu methodları yazar. Şimdilik karşılaştırma için bilmemiz gereken bu kadar.
Temel fark: bir sınıf yalnızca bir abstract class'ı extends edebilir (tek miras), ama birden fazla interface'i implements edebilir.
Ayrıca interface property tutmaz; yalnızca method imzası ve sabit. abstract class ise property, constructor ve gövdeli method tutabilir. interface saf sözleşmedir; abstract class kısmi uygulama paylaşır.
ne zaman interface, ne zaman abstract?
interface saf sözleşmedir; uygulayan sınıflar arasında ortak kod paylaşmaz. İlişkisiz sınıflara aynı capability'yi (rolü) eklemek için idealdir: Loggable, Serializable, Cacheable.
abstract class ortak bir temel ve kısmi uygulama sunar. Animal altında Dog, Cat gibi bir hiyerarşi kuruyorsan, paylaşılan property ve methodları abstract class'ta toplarsın.
Özet: capability (yetenek) için interface, ortak temel için abstract class. İkisi birlikte de kullanılabilir: class Dog extends Animal implements Loggable.
Kendini test et
-
Bir sınıf kaç tane interface uygulayabilir?
- Sınırsız sayıda
- Yalnızca bir tane
- En fazla iki
- Hiçbir tane
Cevabı göster
Sınırsız sayıda — Doğru. Bir sınıf virgülle sınırsız interface uygulayabilir: implements A, B, C.
-
abstract class ve interface birlikte
class Dog extends Animal ____ Loggable, Cacheable { // ... }Cevabı göster
class Dog extends Animal implements Loggable, Cacheable { // ... } -
interface ve abstract farkını eşleştir
- interface
- Sınırsız uygulama
- abstract class
- Tek miras alınır
- property
- abstract class'ta
- saf sözleşme
- interface'te
-
Hangi durumda interface tercih edilir?
- Ortak kod paylaşılacaksa
- Paylaşılan property gerekiyorsa
- Tek bir temel sınıf hiyerarşisi kurulacaksa
- İlişkisiz sınıflara aynı capability eklenecekse
Cevabı göster
İlişkisiz sınıflara aynı capability eklenecekse — Doğru. İlişkisiz sınıflara aynı capability (rol) eklemek için interface idealdir.