Anahtar Farkı: Arayüz veya protokol, ilgisiz nesnelerin birbirleriyle iletişim kurmasını sağlayan ortak bir yoldur. İki nesne arasındaki etkileşimi kolaylaştıran kararlaştırılmış bir davranışı temsil eder. Soyut sınıf, başlatılamayan veya bir nesnenin örneğini ayarlayamayan bir nesne sınıfıdır. Bu sınıfın bir uygulaması olmayabilir veya tamamlanmamış bir uygulaması olabilir.
Java, C dilinden etkilenen bir programlama dilidir. Sözdiziminin çoğunu C ve C ++ 'dan alıyor, ancak her ikisinden de daha düşük seviyeli olanaklara sahip. Java, önceki dillere göre daha az uygulama bağımlılığı olacak şekilde tasarlanmış genel amaçlı bir programlama dilidir. Eş zamanlı, sınıf tabanlı ve nesne yönelimli bir dildir.
Java, Sun Microsystems'da James Gosling tarafından geliştirildi ve 1995 yılında piyasaya sürüldü. Aslen Sun Microsystems'in Java platformunun temel bir bileşeni olarak piyasaya sürüldü. Sun, o zamandan beri Java teknolojilerinin çoğunu GNU Genel Kamu Lisansı altında yeniden lisansladı. Bu, GNU Genel Kamu Lisansı altında lisanslı olan tüm teknolojinin açık kaynak ve genel olarak ücretsiz olduğu anlamına gelir. Sun Microsystems sonunda Oracle Corporation ile birleşti. 2012 itibariyle, Java kullanım için en popüler programlama dillerinden biri haline gelmiştir. Bu, özellikle istemci-sunucu web uygulamaları için geçerlidir. Diğer birçok sistem, Java için GNU Compiler ve GNU Classpath gibi Sun teknolojilerinin alternatif uygulamalarını geliştirmiştir.
Soyut sınıf, başlatılamayan veya bir nesnenin örneğini ayarlayamayan bir nesne sınıfıdır. Bu sınıfın bir uygulaması olmayabilir veya tamamlanmamış bir uygulaması olabilir. Ayrıca, tüm alt sınıflar tarafından paylaşılan soyut yöntemlere veya özelliklere de sahip olabilir. Bazı programlama dillerinde, uygulanmayan soyut tipler, arayüzler olarak bilinir. Java'da, sınıf tanımındaki 'abstract' anahtar sözcüğünü kullanarak bir soyut tür oluşturulabilir. Soyut sınıfa uygulanmayan tüm yöntemleri yerleştirmek ve bu sınıfların nasıl uygulanacağını belirlemek için onu alt sınıfa bırakmak için soyut bir sınıfa sahip olma amacı. Bir sınıfın tek bir soyut yöntemi varsa, sınıfın soyut bir sınıf ilan etmek için en az bir tek yönteme sahip olmasına gerek kalmamasına rağmen, sınıf soyut sınıf olarak ilan edilmelidir.
Malliktalksjava.in, arayüz ile özet arasındaki ana farkları şöyle sıralar:
- Soyut sınıfın kurucusu var ama arayüz yok.
- Soyut sınıfların bazı üyeleri için uygulamaları olabilir (Metotlar), fakat arayüz herhangi bir üyesine uygulama yapamaz.
- Soyut sınıflar, yararsız olacak başka alt sınıflara sahip olmalıdır.
- Arayüzlerin başka sınıflar tarafından başka yararsız uygulamaları olacak uygulamaları olmalıdır.
- Yalnızca bir arayüz başka bir arayüzü genişletebilir, ancak herhangi bir sınıf soyut bir sınıfı genişletebilir.
- Arayüzlerdeki tüm değişkenler varsayılan olarak kesindir
- Arayüzler çoklu kalıtım şekli sağlar. Bir sınıf yalnızca bir sınıfı daha genişletebilir.
- Arayüzler, kamuya açık yöntemlerle sınırlıdır ve uygulama gerektirmeyen sabitlerle sınırlıdır. Soyut sınıflar kısmi bir uygulamaya, korunan parçalara, statik yöntemlere vb. Sahip olabilir.
- Bir Sınıf birkaç arayüz uygulayabilir. Ancak, soyut sınıf durumunda, bir sınıf sadece bir soyut sınıfı uzatabilir.
- Gerçek sınıftaki karşılık gelen yöntemi bulmak için ekstra aktarım gerektirdiğinden arayüzler yavaştır. Soyut sınıflar hızlı.
- Erişilebilirlik değiştiricisine (Genel / Özel / dahili) soyut sınıf için izin verilir. Arayüz erişilebilirlik değiştiricisine izin vermiyor
- Soyut bir sınıf, eksiksiz veya eksik yöntemler içerebilir. Arabirimler yalnızca bir yöntemin imzasını içerebilir ancak gövde içermez. Böylece soyut bir sınıf yöntemleri uygulayabilir, ancak bir arayüz yöntemleri uygulayamaz.
- Soyut bir sınıf, alanlar, yapıcılar veya yıkıcılar içerebilir ve özellikleri uygulayabilir. Arabirim, alanlar, inşaatçılar veya yıkıcılar içeremez ve yalnızca mülkün imzasına sahiptir, ancak uygulaması yoktur.
- Soyut, korumalı, dahili, genel, sanal, vb. Gibi çeşitli erişim düzenleyicileri soyut Sınıflarda faydalıdır ancak arayüzlerde kullanılamaz.
- Özet kapsamı türetilmiş sınıfa kadar.
- Arayüz kapsamı, kalıtım zincirinin herhangi bir seviyesine kadardır.
Tablodaki bilgiler codeproject.com ve mindprod.com'un izniyle
arayüzey | Soyut sınıf | |
Çoklu kalıtım | Bir sınıf çeşitli arayüzleri devralabilir. | Bir sınıf sadece bir soyut dersi miras alabilir. |
Varsayılan uygulama | Bir arayüz herhangi bir kod sağlayamaz, sadece imza. | Soyut bir sınıf tam, varsayılan kod ve / veya sadece geçersiz kılınması gereken ayrıntılar sağlayabilir. |
Erişim Değiştiriciler | Bir arayüz, alt, işlevler, özellikler vs. için erişim değiştiricilere sahip olamaz. Her şey genel olarak kabul edilir. | Soyut bir sınıf alt, fonksiyonlar, özellikler için erişim değiştiricileri içerebilir. |
Çekirdek vs. Periferik | Arayüzler, bir sınıfın çevresel yeteneklerini tanımlamak için kullanılır. Başka bir deyişle, hem İnsan hem de Araç IMovable bir arayüzden miras alabilir. | Soyut bir sınıf, bir sınıfın çekirdek kimliğini tanımlar ve orada aynı türdeki nesneler için kullanılır. |
homojenlik | Çeşitli uygulamalar yalnızca yöntem imzalarını paylaşıyorsa, Arayüzleri kullanmak daha iyidir. | Eğer çeşitli uygulamalar aynı türdeyse ve ortak davranış ya da statü kullanıyorsa, soyut sınıfın kullanılması daha iyidir. |
hız | İlgili yöntemi bulmak için gerçek yöntemi bulmak için daha fazla zaman gerekir. | Hızlı |
İşlev ekleme | Bir Arayüze yeni bir yöntem eklersek, o zaman ara yüzün tüm uygulamalarını izlemeli ve yeni yöntem için uygulamayı tanımlamalıyız. | Soyut bir sınıfa yeni bir yöntem eklersek, varsayılan uygulama sağlama seçeneğine sahibiz ve bu nedenle mevcut tüm kodlar düzgün çalışabilir. |
Alanlar ve Sabitler | Arayüzlerde hiçbir alan tanımlanamaz. | Soyut bir sınıfta tanımlanmış alanlar ve sabitler olabilir. |
kısa ve öz olma | Bir arabirimdeki sabit bildirimlerin tümü genel statik statik olduğu varsayılır. | Paylaşılan kod soyut bir sınıfa eklenebilir. |
Sabitler | Yalnızca statik son sabitler, arabirimi uygulayan sınıflarda kalifiye olmadan bunları kullanabilir. | Hem örnek hem de statik sabitler mümkündür. Sabitleri hesaplamak için hem statik hem de örnek intialiser kodu da mümkündür. |
Üçüncü Parti Kolaylığı | Herhangi bir üçüncü taraf sınıfa bir arayüz uygulaması eklenebilir. | Üçüncü sınıf bir sınıf sadece soyut sınıftan yayılmak için yeniden yazılmalıdır. |
is-a vs. -able veya can-do | Arayüzler, bir sınıfın çevresel kimliğini değil, merkezi kimliğini değil, çevresel yeteneklerini tanımlamak için kullanılır, örneğin, Automobile sınıfı, aksi takdirde pek alakasız nesneler için geçerli olan Geri Dönüşümlü arayüzü uygulayabilir. | Soyut bir sınıf, torunlarının öz kimliğini tanımlar. Uygulanan arayüzler, bir sınıfın yapabileceği şeyleri değil, bir sınıfın yapabileceği genel şeyleri numaralandırır. Bir Java bağlamında, kullanıcılar, Thread'ı genişletmek yerine genellikle Runnable arabirimini uygulamalıdır, çünkü yeni bir Thread işlevi sağlamakla ilgilenmezler, normalde sadece bir kodun bağımsız olarak çalışabilme özelliğine sahip olmasını isterler. Yeni bir tür iplikten değil, bir dizide çalıştırılabilecek bir şey yaratmak istiyorlar. Miras almaya ya da delege etmeye karar verdiğinizde benzer olan-a-has-a-tartışması ortaya çıkar. |
Eklenti | Kullanıcı, mevcut uygulamalarla ortak olarak tek bir kod çubuğu içermeyen bir arayüz için yeni bir değiştirme modülü yazabilir. Kullanıcı arayüzü uygularsa, varsayılan uygulama olmadan sıfırdan başlar. Kullanıcı diğer sınıflardan araçlar almak zorundadır; Arayüzle birkaç sabitten başka hiçbir şey gelmiyor. Bu, kullanıcıya radikal biçimde farklı bir iç tasarım uygulama özgürlüğü verir. | Kullanıcı, iyi veya kötü tüm görevli bagajıyla birlikte, kod tabanı için olduğu gibi soyut sınıfı kullanmalıdır. Soyut sınıf yazarı, kullanıcıya bir yapı koydu. |
Bakım | Eğer müşteri kodu sadece bir arayüzden bahsediyorsa, arkasındaki somut uygulamayı bir fabrika metodu kullanarak kolayca değiştirebilirsiniz. | Müşteri kodu yalnızca soyut bir sınıftan bahsediyorsa, bir fabrika yöntemini kullanarak arkasındaki somut uygulamayı kolayca değiştirebilirsiniz. |