Tavsiye, 2022

Editörün Seçimi

Java ve C # Arayüz ve Soyut Sınıf Arasındaki Fark

Arayüz ve Özet sınıfının her ikisi de OOP'ta “eksik tip” e katkıda bulunur. Bazen “ne yapacağını” tanımlamak için bir üst sınıfa ihtiyaç duyarız, ancak “nasıl yapılır” değil, bir kısmın türetilmiş sınıf tarafından ihtiyacına göre nasıl uygulanacağını, “ arayüz ” buna bir çözüm sunar. Bazen türetilmiş sınıflar tarafından uygulanabilecek genelleştirilmiş bir yapıyı ve türetilmiş sınıflar tarafından kullanılabilecek belirli bir yapıyı tanımlayan bir üst sınıfa ihtiyaç duyarız, “ soyut sınıf ” buna bir çözüm sunar. Arayüz ve soyut sınıf arasındaki temel fark, arayüzün tamamen eksik olması ve soyut sınıfın kısmen eksik olmasıdır.

Karşılaştırma Tablosu

Karşılaştırma için temelarayüzeySoyut sınıf
TemelGereksinimleri yalnızca uygulamasıyla ilgili olmayan bilgiye sahipseniz, "Arayüz" ü kullanırsınız.Uygulamalar hakkında kısmen bilgi sahibi olduğunuzda "Soyut sınıflar" kullanırsınız.
YöntemlerArayüz sadece soyut yöntemler içerir.Soyut sınıf, somut yöntemlerin yanı sıra soyut yöntemleri de içerir.
Yöntemlerin Erişim DeğiştiricisiArabirim yöntemleri, bildirmesek bile, her zaman "Genel" ve "Özet" tir. Bu nedenle, % 100 saf soyut sınıf olarak söylenebilir.Soyut sınıftaki yöntemin kamu ve soyut olması zorunlu değildir. Ayrıca somut yöntemlere de sahip olabilir.
Yöntemler için Sınırlı DeğiştiriciBir arayüz yöntemi, aşağıdaki değiştiricilerle bildirilemez:
Kamu: Özel ve Korumalı
Özet: final, statik, senkronize, yerli, strictfp.
Soyut sınıf değişkeninin değiştiricileri üzerinde herhangi bir kısıtlama yoktur.
Değişkenlere Erişim DeğiştiriciArabirim değişkenleri için izin verilen Acess Modifier, bildirir ya da bildirmesek de genel, statik ve nihaidir.Soyut sınıftaki değişkenlerin genel, statik ve final olması gerekmez.
Değişkenler için kısıtlı değiştiricilerArabirim değişkenleri özel, korumalı, geçici, geçici olarak bildirilemez.Soyut sınıf değişkenlerinin değiştiricileri üzerinde herhangi bir kısıtlama yoktur.
Değişkenlerin başlatılmasıArabirim değişkenleri, bildirimi sırasında başlatılmalıdır.Beyannamesi sırasında soyut sınıf değişkenlerinin başlatılması zorunlu değildir.
Örnek ve statik bloklarArayüzün içinde bir örnek veya statik blok bildiremezsiniz.Soyut sınıf, içindeki bir örneğe veya statik bloğa izin verir.
KurucularArayüzün içindeki yapıcıyı bildiremezsiniz.Yapıcıyı soyut bir sınıf içinde ilan edebilirsiniz.

Arabirimin Tanımı

Java çoklu mirasa izin vermiyor. Yani, tek bir sınıf bir seferde birden fazla sınıf devralamaz. Bunun arkasındaki neden bir örnekle açıklanabilir. Diyelim ki iki A sınıfı ve A ve B sınıfı ve C sınıfı bir türevimiz var. Elde edilen sınıf C, hem A hem de B sınıflarını miras alıyor. Şimdi, hem A hem de B sınıfı var, yöntem seti () var, o zaman bir soru olacak. C sınıfı için hangi sınıfın set () yönteminin kalıtsal olması gerekir. Bu sorunun çözümü “arayüz” dür.

Arayüz saf soyut bir sınıftır. Bir arayüz oluşturmak için kullanılan anahtar kelime “arayüz” dür. Arayüz içindeki tüm yöntemler tamamen soyut olduğundan. Arayüz sadece bir sınıfın ne yapması gerektiğini belirtir, fakat nasıl yapılacağını tanımlamaz. Arabirim içinde bildirilen tüm yöntemlerin soyut olduğu için, arabirim için örnek oluşturulamaz. Java’daki genel “arayüz” şekli:

 access_specifier arabirimi interface_name {return-type yöntemi-adı1 (parametre listesi); return-type yöntemi-name2 (parametre listesi); final-varname1 yazın = değer; final-varname2 yazın = değer; // ... return-type yöntemi-adıN (parametre listesi); final-varnameN = değer; } 

Erişim belirteci, sınıfların arabirimi uygulaması gerektiğinden genel olarak ilan edildi.

C ++ 'ta “Arayüz” kavramına sahip değiliz. Ancak, Java ve C # arayüzü çok iyi tanımlar.

Java'da Arayüz:

  • Bir arabirimin değişkenleri varsayılan olarak her zaman genel, statik ve sondur.
  • Değişkenler beyan edildiği tarihte başlatılmalıdır.
  • Değişkenler asla özel, korumalı, geçici ve geçici olarak ilan edilemez.
  • Bir ara yüzün yöntemleri her zaman halka açık ve soyuttur, oysa ki asla özel, korumalı, nihai, statik, senkronize, yerel ve kesin olarak bildirilemezler.
  • Yapıcının temel amacı, sınıf değişkenlerinin başlatılması olduğundan arabirim içindeki hiçbir kurucuyu ilan edemezsiniz, ancak arabirim değişkenlerinde bildirimi sırasında başlatılır.
  • Arabirim, diğer arabirimleri devralabilir, ancak bu tür arabirimi uygulayan sınıfın, miras alınan tüm arabirimlerin yöntemlerini uygulaması gerekir.
  • Bir sınıf aynı anda birden fazla arayüzü miras alabilir ve miras alınan tüm arayüzlerin tüm yöntemlerini uygulamalıdır.

Java'da arayüz uygulamanın genel şekli:

 sınıf class_name Interface_name uygular {// class-body} 

Bir arabirim miras almak için, bir sınıf “uygular” anahtar sözcüğünü kullanır ve sınıf, miras alınan bir arayüz tarafından bildirilen tüm yöntemleri uygular.

C # içindeki arayüz:

C # 'daki arayüz, Java dışındaki arayüze neredeyse benzer:

  • C # 'daki arayüz değişkenleri bildirmez.
  • Arayüzün adı büyük harf I ile belirtilir ve iki nokta üst üste (:) işaretiyle miras alınır.

C # 'da bir arayüz uygulamanın genel şekli:

 sınıf class_name: interface_name {// class-body} 

Soyut sınıfın tanımı

Bir veya daha fazla soyut yöntem içeren bir sınıfa soyut sınıf denir ve sınıf bildiriminin başındaki “class” anahtar sözcüğünden önce gelen “abstract” anahtar kelimesini kullanarak bir sınıf soyut olarak ilan edilir. Soyut sınıf soyut yöntemi içerdiğinden eksik bir tip oluşturur. Dolayısıyla, soyut bir sınıfın nesnelerini oluşturamazsınız. Bir sınıf, soyut bir sınıfa miras aldığında, soyut sınıfın tüm soyut yöntemlerini uygulamalı, eğer o zaman yapmazsa, o zaman da soyut olarak ilan edilmelidir. Soyut öznitelik, soyut yöntemlerin tam olarak uygulanmasına ulaşılıncaya kadar miras alınır.

Soyut sınıf, türetilmiş sınıf tarafından olduğu gibi kullanılabilecek somut yöntemler de içerebilir. Ancak, soyut bir sınıf içinde soyut bir kurucu veya soyut bir statik yöntem bildiremezsiniz. Java'da soyut sınıfın genel formu şöyledir:

 soyut sınıf class_name {abstract yöntem_adı1 (); soyut yöntem_adı2 (); : return_type yöntemi_adı3 (parametre_ listesi) {// concrete method} return_type yöntemi_adı4 (parametresi_list) {// concrete method}}; 

Soyut bir sınıf kavramı hem Java hem de C # ile benzerdir. Soyut bir sınıf C ++ 'ta biraz farklıdır.

C ++ 'da bir sınıf en az bir sanal fonksiyona sahipse, sınıf soyut bir sınıf haline gelir. “Abstract” anahtar kelimesi yerine “virtual” anahtar kelimesi soyut bir metot bildirmek için kullanılır.

Java ve C # Arayüz ve Soyut Sınıf Arasındaki Temel Farklar

  1. “Neyin gerekli” bilgisine sahip olduğunuzda ancak “nasıl uygulanacağını” bilmediğiniz zaman arayüz kullanılmalıdır. Öte yandan, neyin gerekli olduğunu ve nasıl uygulanacağını kısmen biliyorsanız, o zaman soyut bir sınıf kullanın.
  2. Bir ara yüzün bütün yöntemleri soyut ama soyut bir sınıfın bazı soyut yöntemleri ve bazı somut yöntemleri var.
  3. Bir arayüzün içindeki yöntemler kamusal ve soyuttır, dolayısıyla saf soyut sınıf olarak da adlandırılır. Öte yandan, bir özetin içindeki yöntemlerin yalnızca halka açık ve soyut olması sınırlı değildir.
  4. Bir arayüz yöntemi asla özel, korumalı, nihai, statik, senkronize, yerel veya kesin olamaz. Öte yandan, soyut bir sınıfın yöntemleriyle ilgili herhangi bir kısıtlama yoktur.
  5. Bir arayüzdeki değişkenler herkese açık ve nihaidir, bunları açıklamak ya da bildirmemek, soyut bir sınıfın değişkenleri için sadece genel ve nihai olmak üzere böyle bir kısıtlama yoktur.
  6. Bir arabirimdeki değişkenler hiçbir zaman özel olarak korunan geçici veya geçici olamaz, oysa soyut bir sınıftaki değişkenlerle ilgili hiçbir kısıtlama yoktur.
  7. Arabirimin değişkeni bildirim sırasında başlatılmalıdır. Öte yandan, soyut bir sınıftaki değişkenler herhangi bir zamanda başlatılabilir.
  8. Bir arabirim içinde, bir örnek veya statik blok bildirilemez, ancak soyut bir sınıf içinde örnek veya statik blok bildirebilirsiniz.
  9. Yapıcıyı bir arabirim içinde tanımlayamazsınız, oysa soyut bir sınıf içinde yapıcıyı tanımlayabilirsiniz.

Sonuç:

İhtiyaçlarına göre türetilmiş sınıflar tarafından uygulanabilecek genelleştirilmiş bir yöntem biçimi içeren bir temel sınıf yaratmanız gerektiğinde, arabirim ve soyut sınıf kavramı bunu yapmanıza yardımcı olur.

Top