Arkadaşlar abstract class kullanımı hakkında açıklama yapabilir misiniz? Nedir? Hangi durumlarda kullanılır? Niçin kullanılır? Interface ile mantıksal olarak farklılığı nedir?

soruldu: 23 Mar '13, 11:32

emax_64's gravatar image

emax_64
64590102101
cevap kabul oranı: 20%

değiştirildi: 18 Nis '13, 03:05

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


Abstract sınıflar normal tanımladığımız sınıflar gibi aynı şekilde tanımlanabilen sınıflardır...Peki bunları özel kılan nedir?

Benim aklıma gelen öncelikle

1-Bu sınıflardan new anahtar sözcüğü ile nesnelerinin oluşturulamaması (yani sadece kalıtım ile hayata geçerler...)

2- içlerinde abstract metodlar tanımlanabilmesi : sadece metod prototipi oluşturursun kalıtım alan her sınıf onu kendisine göre tanımlar...)

Diğer özellikleri normal sınıflar gibidir tekli kalıtım vs..

Peki niçin kullanılır... (Burada 1. maddeden yola çıkarak) yeni nesneleri oluşturulmadığına göre diğer sınıflar, abstract olan sınıftan kalıtım alacaklardır... Yani bizim temel sınıfımız niteliğindedir...abstract sınıflar temel sınıf olduğuna göre burada yazdığımız metodlar gerçekten yapı taşı niteliğinde olmalıdır, diğer sınıflar buradan kalıtım aldığı için yapacağımız en küçük değişiklik bile bütün sınıfları etkileyecektir,buradan anlaşılacağı üzere abstract sınıflarda esneklik zayıftır...

Yine 1. maddeden yola çıkarak abstract sınıflar çok biçimlilik(polymorphism) e tam destek verir..

İnterface'lere gelecek olursak...

Abstract sınıfların, içinde değişken bulundurmayan,tüm metodları abstract olan ve çoklu kalıtıma izin veren halidir...

Interface'lerdeki bütün metodlar abstract olduğu için esneklik ön plandadır... Ayrıca Interface oluşturulurken tüm birimleri en küçük parçalara ayırmak kullanabilirlik açısından önemlidir...

Abstract sınıflar ile interfaceler arasındaki farklar kısaca bunlardır...

Hangisini ne zaman kullanmalıyız? Hangisi sizin işiniz için daha yararlıysa onu kullanmanız gerekecektir...

Benim tavsiyem hangisini kullanmam benim için daha iyidir sorusuna çok fazla kafa yormamanız... Hani araba,bisiklet sürme gibi eylemler için ilk başlarda neyi nasıl yapacağını düşünürsün önce hangi adımı atsam, gaz orda mıydı, pedala nasıl bassam vs. gibi daha sonradan her şey otomatiğe bağlanır ve ne yapacağını düşünmezsin bile... Abstract ve Interface'lerin kullanımınıda buna benzetiyorum. Bu kavramları araştırın mantığını öğrenmeye çalışın ama çokda napmalıyım hangisini kullanmalıyım diye düşünmeyin.Sadece kullanın ve zamanla herşey yoluna girecektir...

permanent link

cevaplandı: 24 Mar '13, 19:36

Erdemym's gravatar image

Erdemym
99191828
cevap kabul oranı: 17%

@Erdemym süper bir anlatım ve yorum.

(26 Mar '13, 09:56) ismailkocacan ismailkocacan's gravatar image

Buradaki anlatim isinizi gorebilir.

permanent link

cevaplandı: 23 Mar '13, 16:48

mhkoca60's gravatar image

mhkoca60
1.8k264554
cevap kabul oranı: 15%

Abstract sınıflar genelde sınıflar arasında bir ilişki (bağlantı) varsa kullanılır. Interface ise ilişkisel olmayan, daha çok genel bir çatı olarak düşünülebilir. İki nesne arasındaki ilişki olarak belirtmek daha anlaşılması yönünden açık olur.

Öğretmen <-> (Öğretir = Interface) <-> Ders

Java'da birden fazla abstract sınıfı extends(genişletme) edemezsin, fakat birden çok Interface tanımlı sınıfı impelements edebilirsin.

Interface sınıf ile alt sınıfların işlevselliğini artırırız.

Interface içindeki metodlar final anahtar sözcüğü gibi davranırlar ve bütün alt sınıflarda implement edilirler.

Kullanım için ek olarak son maddeden yola çıakrsak, siz bir metod yazıp bunun bazı sınıflarda çalışmasını istiyorsanız, abstract olması daha makuldur. Aklıma geldikçe bu konuya katkıda bulunmaya çalışacağım.

Soru için +1

permanent link

cevaplandı: 25 Mar '13, 02:30

Turgay%20Can's gravatar image

Turgay Can
8.4k63799
cevap kabul oranı: 18%

buradan konuyu inceleyebilirsiniz.

buradan da kitabın tümünü inceleyebilirsiniz.

permanent link

cevaplandı: 24 Mar '13, 14:23

ercet00ilk's gravatar image

ercet00ilk
994435662
cevap kabul oranı: 11%

Interface'ler sadece metod isimlerini barındırır başka bişeye karışmaz. Ortak bir kalıp oluşturulmuş olur. Ama bazen bazı metodların implementasyonları hiçbir zaman değişmeyeceği durumlar olabilir. O zaman da abstract class tanımlarsın ve burada hem abstract metodları belirleyerek implementasyonu bir alt class'a bırakırsın hemde her subclassta aynı olacak olan metodları implemente edersin. Kısaca fark bu.

Bildiğin üzere abstrac class'lar extend edilir, interface'ler implement (impelements) edilir. Ayrıca javanın yalnızca bir class'ı extend edilebilmesi kuralını da unutmayıp nerede interface nerede abstrac class kullanacağını iyi tasarlaman lazım. Burada da biraz tecrübe biraz da design patterns bilgisi gerekli.

permanent link

cevaplandı: 06 May '13, 17:50

kodmanyagha's gravatar image

kodmanyagha
3.1k132852
cevap kabul oranı: 15%

değiştirildi: 06 May '13, 17:51

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079

Soruldu: 23 Mar '13, 11:32

Görüntüleme: 1,618 kez

Son güncelleme: 06 May '13, 17:51

powered by BitNami OSQA