Sınıfımın implements
arayüzü varsa o zaman mirası takip ettiğimi söyleyebilir miyim? Bir sınıf extends
başka bir sınıfa geldiğinde kalıtım olduğunu biliyorum .
Sınıfımın implements
arayüzü varsa o zaman mirası takip ettiğimi söyleyebilir miyim? Bir sınıf extends
başka bir sınıfa geldiğinde kalıtım olduğunu biliyorum .
Yanıtlar:
GÜNCELLEME: Bu cevabı revize ettim. Söylemeyi hak eden yorumlarda bir takım iyi noktalar ortaya atıldı.
Sınıfım bir arayüz uygularsa kalıtım takip ettiğimi söyleyebilir miyim?
"Mirastan sonra" ile ne kastettiğiniz tam olarak açık değildir. Biraz farklı bir soru soralım mı?
Kalıtım nedir?
Bunlar çok farklı. Bu talihsiz çünkü kafa karıştırıcı.
Bu şaşkınlıktan tipik olarak hangi kafa karışıklıkları ortaya çıkar?
İnsanların mirası, uygulama detaylarını paylaşma mekanizması olarak düşündüğü için karışıklık ortaya çıkabilir. Bu olsa olduğu böyle bir mekanizma, bu mekanizma paylaşarak çalışır üyeleri . Bu üyelerin uygulamaları olması gerekmez! Göreceğimiz gibi soyut olabilirler.
Java ve C # özellikleri, bu karışıklığı önlemek için arayüz yöntemleri ve sınıflar arasındaki ilişkiyi tanımlamak için "miras" dışında bir kelime kullanırsa şahsen daha mutlu olurdum. Ama onlar değil, ve biz akla sahip gelen teknik özellikleri, değil karşı onlarla.
Java'da, arayüz üyeleri onları uygulayan sınıflardan miras alıyorlar mı?
Evet, bazıları Rahatınız için burada alıntı yaptığım Java spesifikasyonu bölüm 8.4.8'e bakın.
C sınıfı, doğrudan üst sınıfından ve doğrudan üst arayüzlerinden, aşağıdakilerin tümü için geçerli olan tüm soyut ve varsayılan yöntemleri miras alır: [...]
Bir sınıfın bir arayüz uyguladığını söylerseniz, sınıf o arayüzün soyut ve varsayılan yöntemlerini miras alır . (Tabii ki takip eden şartları göz ardı ettim; ayrıntılar için teknik özelliklere bakın. Özellikle, bir arayüzün bir üyesini uygulayan bir sınıfın bu üyeyi miras aldığı kabul edilmez . Yine, bu kafa karıştırıcı mı? Evet.)
Genelde Java'da bir sınıfın bir arayüzden miras kaldığını söylüyor muyuz?
Tipik bir sınıf olduğunu söyleyebilirim uygulayan bir arabirim. Yukarıda belirtildiği gibi, bir sınıf üyeleri bir arayüzden devralabilir ve yine de arayüzden devraldığı söylenemez. Kafa karıştırıcı, evet.
Bu ince ayrım günlük işler için önemli mi?
Genelde hayır. Spesifikasyondaki bu dar ayrıştırma, derleyici yazarlar için iş dünyasındaki geliştiricilere göre daha kullanışlıdır. Arabirimi ne zaman kullanacağınızı anlamak, "miras" ın kesin bir tanımını almaktır.
java
bu yüzden OP başka bir şey ifade etmediğinde doğru cevap bu, java
:-)
Kalıtım , bir üst sınıf için yeni bir alt sınıf yazmak anlamına gelir. Bir arabirime karşı yeni bir sınıf yazmak, bu arabirimi uygulamaktır . (Ve eski olanı temel alan yeni bir arayüz yazmak, bu arayüzü genişletmektir .)
Üç olasılık için de geçerli olan tek doğru terim alt yazıdır . Her alt tip bir alt sınıf değildir.
İle alt sınıfları , sen
İle arayüzleri , yanından bir sözleşme fullfill uygulanması beyan yöntemleri.
Buna bakmanın klasik yolu bu. Şimdi Java 8 ile arayüzler bir karışım haline geldi:
Yöntemlerinin hepsinin varsayılan uygulamaları olan bir arayüzün uygulanması hala “uygulama” olarak mı, yoksa uzantı olarak mı sayılır? Söyleyemedim. Bu dava oldukça ileriye götürüldüğü için (bu aslında durumsuz çoklu miras özelliğini etkinleştirdi), hala “miras” ı sadece alt sınıflarla kullanırdım.