Arayüz yöntemlerini soyut yöntemler olarak düşünebilir miyim?


15

Bunu düşünüyordum ve bazı şüphelerim vardı.

Bir arayüz beyan ettiğimde, örneğin:

public interface MyInterface
{
   public void method1();
   public void method2();
}

Bu arayüz yöntemleri soyut kabul edilebilir mi? Demek istediğim, soyut bir yöntem kavramı:

Soyut bir yöntem, bildirilen ancak uygulama içermeyen bir yöntemdir.

Peki, bu yöntemler soyut kabul edilebilir mi? abstractKelimeyi kullanmadığım için "saf" soyut yöntemler değiller , ama kavramsal olarak, öyle görünüyorlar.

Onun hakkında bana ne söyleyebilirsin?

Teşekkürler.


Muhtemelen en iyi SO
billy.bob

5
@ billy.bob - Sanırım Stack Overflow için çok soyut. Burada özel bir kodlama sorunu yok.
ChrisF

Bu Java kodu mu?
Andres F.

hayır değil. bu sadece bir örnek. soru herhangi bir programlama diline odaklanmamıştır.
rogcg

Yanıtlar:


14

Bir arayüz "tamamen" soyut bir sınıf gibidir. Sınıf ve tüm yöntemleri soyuttur. Soyut bir sınıf yöntemler uygulayabilir, ancak sınıfın kendisi somutlaştırılamaz (kalıtım ve DRY'yi takip etmek için yararlıdır).

Bir arayüz için, hiçbir uygulama olmadığından, amaçları için yararlıdırlar: bir sözleşme. Arabirimi uygularsanız, arabirimdeki  yöntemleri uygulamanız gerekir .

Yani fark, soyut bir sınıfın yöntemler uygulayabildiği, ancak bir arabirimin yapamayacağıdır.

Ayrı olmalarının nedeni, bir sınıfın birkaç arabirim uygulayabilmesidir. Java ve C #, bir sınıfı tek bir üst sınıftan doğal olarak sınırlar. Bazı diller birden fazla sınıftan miras almanıza izin verir ve "tamamen" soyut bir sınıf aracılığıyla bir arabirimin çalışmasını başarabilirsiniz. Ancak çoklu mirasın sorunları vardır, yani korkunç Elmas Sorunu


Soyut bir sınıfın kalıtımıyla bir veya daha fazla arayüzün uygulanması arasındaki farkı dahil etmek için +1.

Elmas Sorunu harika bir paradoks.
rogcg

1
'Arayüz bir "tamamen' soyut sınıf" kısmı gibidir. Bunlar 2 farklı tip OO 'yapı taşıdır, bu yüzden gerçekten benzer değildirler. Bazı ortak özellikleri paylaşıyorlar, ancak doğada farklı türler, örneğin erkekler ve kadınlar gibi :)
NoChance

5
@Emmand Kareem 'Arayüz "tamamen" soyut bir sınıf' parçası gibi düşünmüyorum. Bu yüzden yazdım :-). Eğer anlaşmazlık lütfen yazı için herhangi bir iyi nedenler varsa, gibi id duymak
kodlayıcı


11

Burada yararlı bir cevap buldum: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html

Bir arabirimdeki tüm yöntemler dolaylı olarak soyuttur, bu nedenle soyut değiştirici arabirim yöntemleriyle kullanılmaz (olabilir - sadece gerekli değildir).


1
Ayrıca soyut sınıf uzanır unutmayın tek diğer nesne. Arayüzlerin üst sınıf kavramı yoktur.

2
Ayrıca birden fazla arabirim uygulayabileceğinizi, ancak soyut ya da soyut olarak yalnızca bir sınıftan miras alabileceğinizi unutmayın.
NullUserException

@ ThorbjørnRavnAndersen: Bir arayüz bir veya daha fazla arayüzü genişletebilir. Süper bir sınıfla aynı şey değil, ama bir miras düzeyidir.
holysampler

Birden fazla arabirim uygulayabilirsiniz. Çoklu kalıtım kavramına benziyor, ama tam olarak değil.
rogcg

Dediğim gibi bir süper sınıf olmayan @ unholysampler.

4

Soyut sınıflar edebilir soyut yöntemler var.

Arayüzler sadece soyut yöntemlere sahip olabilir .

method1()ve method2()örneğinizde soyut yöntemler.


-1

Buradaki fark, soyut sınıfların kendi başlarına somutlaştırılamamasına rağmen uygulama ayrıntılarını içerebilmesidir. Arayüz sadece bir sınıf için bir şablondur


8
Soyut yöntemler uygulama detaylarını içeremez. Soyut sınıflar olabilir.
Matt H

Bir yöntem ve bir sınıf arasındaki farkı biliyorum - ama ne demek istediğini anlayamıyorum?
billy.bob

Cevabınız, soyut yöntemlerin uygulama ayrıntılarını içerebileceğini belirtir - yapamazlar. Sadece bir yazım hatası mı?
Matt H

1
Yazım hatasını düzelttim.
Martijn Verburg

1
@ billy.bob Bu soru abstact yöntem hakkında olsa da.
SoylentGray

-2

Bu nedenle, bir alt sınıfta miras alınan soyut yöntem, uygulama olmadan tekrar soyutlanabilirken, bir sınıf bir arabirim uygularsa, yöntem uygulanmalıdır.


-3

Arayüz sınıflarının soyut yöntemleri yoktur. Hiçbir yöntemi yok. Arabirime uyum sağlamak için başka bir sınıfın uygulamak zorunda olduğu yöntemlerin bir listesi var. Örneğinizde, birisi bu yöntemleri bir sınıfa ekleyene kadar hiçbir yöntem method1 ve yöntem method2 yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.