Arayüz vs Temel sınıf
Ne zaman bir arayüz kullanmalı mıyım ve ne zaman bir temel sınıf kullanmalıyım?
Her zaman Eğer gerçekten yöntemlerden temel uygulamasını tanımlamak istemiyorum ama bir arabirim olmalıdır?
Köpek ve Kedi bir Dersim var. Neden PetBase yerine İPet uygulamak için isteyeyim? İSheds veya İBarks (İMakesNoise?) sahip arabirimleri anlayabiliyorum bu evcil hayvan olarak bir hayvan üzerinde yerleştirilmiş olabilir, ama genel bir Evcil hayvan için kullanılacak anlamıyorum.
CEVAP
Bir Köpek ve bir Kedi örneği sınıfına alalım ve C kullanarak göstermek izin#:
Bir köpek ve bir kedi de hayvan, özellikle, dört ayaklı memeli (hayvan waaay çok geneldir). Bize soyut sınıf bir Memeli olduğunu, her ikisi için de kabul edelim:
public abstract class Mammal
Bu temel sınıf muhtemelen varsayılan yöntemleri gibi olacaktır:
- Yem
- Dostum
Tüm bunlar daha fazla veya daha az ya da türler arasında aynı uygulaması olmayan davranış. Bu tanımlamak için:
public class Dog : Mammal
public class Cat : Mammal
Şimdi genellikle bir hayvanat bahçesinde göreceğiz diğer memeliler vardır varsayalım:
public class Giraffe : Mammal
public class Rhinoceros : Mammal
public class Hippopotamus : Mammal
Bu hala işlevsellik özünde Feed()
Mate()
yine aynı olacaktır çünkü geçerli olacak.
Ancak, zürafa, gergedan ve su aygırları tam olarak dışarı evcil yapabileceğiniz hayvanlar değildir. Bir arabirim yararlı olacak
public interface IPettable
{
IList<Trick> Tricks{get; set;}
void Bathe();
void Train(Trick t);
}
Yukarıdaki sözleşme için bir uygulama kedi ve köpek arasındaki aynı olacak değil; soyut bir sınıf miras uygulamaları vermenin kötü bir fikir olacaktır.
Kedi ve Köpek tanımları şimdi aşağıdaki gibi görünmelidir:
public class Dog : Mammal, IPettable
public class Cat : Mammal, IPettable
Teorik olarak daha yüksek bir temel sınıf onları geçersiz kılabilirsiniz, ama aslında bir arayüz kalıtım gerek kalmadan bir sınıfa gereken tek şey eklemek için izin verir.
Sonuç olarak, çünkü genellikle sadece miras bir soyut sınıf (en statik olarak yazılan OO dilleri... istisnalar vardır C ) ama olması mümkün uygulamak için birden çok arayüzü sağlar inşa nesneleri bir kesinliklegerektiği gibiolarak.
Arayüz ve soyut sınıf arasındaki fark ...
Arayüz vs Soyut Sınıf (genel OO)...
Python soyut sınıf ve arayüz arasındak...
C , sanal bir temel sınıf nedir?...
Bir temel sınıf'In sanal işlev İ&...