Karşılaştırma Tablosu
Karşılaştırma için temel | arayüzey | Soyut sınıf |
---|---|---|
Temel | Gereksinimleri 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öntemler | Arayü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ştiricisi | Arabirim 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ştirici | Bir 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ştirici | Arabirim 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ştiriciler | Arabirim 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 bloklar | Arayü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. |
Kurucular | Arayü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.
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
- “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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Bir arabirim içinde, bir örnek veya statik blok bildirilemez, ancak soyut bir sınıf içinde örnek veya statik blok bildirebilirsiniz.
- 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.