Bir kodlama röportajında ​​"arayüz ve soyut sınıf arasındaki temel fark nedir?" Sorusu sorulursa, doğru cevap nedir?


cevap 1:

Hayatta adamım, onları yarıya kadar öldürürdüm.

Gerçekten “cevabı bilmiyorum”, ama fikrimin ne olduğunu biliyorum.

Arabirimleri ne bekleyebilirsiniz kod çağrısı için bir söz olarak kullanın. Bu soyutlamadır - nasıl uygularsanız uygulansın her zaman doğru olan şeydir. Bana göre (tipik olarak) uygulama alanını temsil eder - konuyu.

Son örneğim

arayüz UserProfiles {
  İsteğe bağlı  yükü (UUID accountNumber);
}

Arama kodu bir hesap kimliği sağlar ve varsa bir profili geri alır.

Bir sisteme geçiş yaparken şu anda birkaç uygulaması var. Soyut bir sınıf burada yardımcı olabilir.

Soyut bir sınıf bana “özelleştirilebilir mekanizma” yı temsil eder. Konunun bir parçası değil. Müşteri, sunulan hizmetlerin vaadi olarak ona güvenmemelidir.

Uygulamanın bir parçasıdır. Özellikle, bir arabirimin iki veya daha fazla olası uygulaması arasında paylaşılan ortak uygulama kodudur.

Soyut bir sınıfımız olabilir

soyut sınıf DatabaseUserProfiles UserProfiles {
  İsteğe bağlı  load (UUID accountNumber) {
    String databaseSpecificSql = getQueryFindByAccountNumber (accountNumber);

    return executeQuery (databaseSpecificSql);
  }

  soyut Dize getQueryFindByAccountNumber (UUID accountNumber);
}

Bu kurgusal örnekte, profilleri depolamak için desteklediğimiz ve veritabanına özel SQL'i döndürmek için bir GoF ‘şablon yöntemi’ getQueryFindByAccountNumber () kullandığımız birkaç SQL veritabanı ürünümüz olacaktı.

Genel bir SQL veritabanı kullanmanın paylaşılan bölümleri bu soyut sınıfın başka bir yerinde olacaktır.

Yani, evet, aslında bir arayüz - konu / müşteri vaadi - ve ABC (bazen) - paylaşılan bir uygulamaya sahip olurdum.

Okunabilirlik için iki farklı amaç.

Ve evet, Java 8/9/10 ne olursa olsun, bu çizgi C ++ 'da olduğu gibi bulanıktır. Her iki amaca hizmet etmek için bir ABC kullanabilirsiniz, ancak okuyucuma iletmediği için istemiyorum söylemek istediğimi kodla.

Bu noktada hepimiz biraz sıkıldık ve biraz beyaz tahtaya geçiyoruz.


cevap 2:

Sanırım arayüz çoklu mirası destekliyor ve soyut sınıf desteklemiyor. İkinci fark, arayüzdeki tüm yöntemlerin soyut olması gerektiğidir.

Arayüz aslında soyut sınıfın kendisinden daha soyut. Gerekirse, diğer arayüzleri genişleten bir arayüz bile oluşturabilirsiniz.

Arayüz nihai soyut sınıftır. Soyut sınıf, arayüz ve somut sınıf arasında bir melezdir.

Soyut bir sınıf, somut yöntemler içerebilir ve bu nedenle çoklu kalıtım, soyut yöntemlerin geçersiz kılınması için geçerli olmayan somut yöntemlerin belirsiz geçersiz kılmaları oluşturabilir, çünkü soyut yöntemler mantıklıysa, bu mantıklıdır ve böylece Java, arayüzler için sadece çoklu kalıtıma izin verir.

Java Koleksiyonlarının hiyerarşisine bakarsanız, arabirimlerin kullanılmamış olması durumunda, grafiklerin ikili gibi değil de Git ağacı gibi döngüsiz hale geldiğini göreceksiniz.


cevap 3:

Sanırım arayüz çoklu mirası destekliyor ve soyut sınıf desteklemiyor. İkinci fark, arayüzdeki tüm yöntemlerin soyut olması gerektiğidir.

Arayüz aslında soyut sınıfın kendisinden daha soyut. Gerekirse, diğer arayüzleri genişleten bir arayüz bile oluşturabilirsiniz.

Arayüz nihai soyut sınıftır. Soyut sınıf, arayüz ve somut sınıf arasında bir melezdir.

Soyut bir sınıf, somut yöntemler içerebilir ve bu nedenle çoklu kalıtım, soyut yöntemlerin geçersiz kılınması için geçerli olmayan somut yöntemlerin belirsiz geçersiz kılmaları oluşturabilir, çünkü soyut yöntemler mantıklıysa, bu mantıklıdır ve böylece Java, arayüzler için sadece çoklu kalıtıma izin verir.

Java Koleksiyonlarının hiyerarşisine bakarsanız, arabirimlerin kullanılmamış olması durumunda, grafiklerin ikili gibi değil de Git ağacı gibi döngüsiz hale geldiğini göreceksiniz.


cevap 4:

Sanırım arayüz çoklu mirası destekliyor ve soyut sınıf desteklemiyor. İkinci fark, arayüzdeki tüm yöntemlerin soyut olması gerektiğidir.

Arayüz aslında soyut sınıfın kendisinden daha soyut. Gerekirse, diğer arayüzleri genişleten bir arayüz bile oluşturabilirsiniz.

Arayüz nihai soyut sınıftır. Soyut sınıf, arayüz ve somut sınıf arasında bir melezdir.

Soyut bir sınıf, somut yöntemler içerebilir ve bu nedenle çoklu kalıtım, soyut yöntemlerin geçersiz kılınması için geçerli olmayan somut yöntemlerin belirsiz geçersiz kılmaları oluşturabilir, çünkü soyut yöntemler mantıklıysa, bu mantıklıdır ve böylece Java, arayüzler için sadece çoklu kalıtıma izin verir.

Java Koleksiyonlarının hiyerarşisine bakarsanız, arabirimlerin kullanılmamış olması durumunda, grafiklerin ikili gibi değil de Git ağacı gibi döngüsiz hale geldiğini göreceksiniz.