Sınıftaki yöntemleri kullanma ile arabirimdeki yöntemleri kullanma arasındaki fark nedir? Neden arayüz kullanıyoruz?


cevap 1:

Boi, arayüz, soyut sınıf ve jenerikleri sadece son zamanlarda yoğun bir şekilde kullanıyorum, çünkü çoğunlukla dinamik yazılan dilde programlama yapıyorum ve ancak şimdi üniversite sırasında öğrenmem gerekenleri takdir edebiliyorum.

programlamada 2 çeşit hata vardır.

  1. Derleme Zamanı Hataları, programınızı bile derleyemediğinizde, dosyanızın bir kısmı Kırmızı renktedir. Çalışma Zamanı Hataları, programınızın derlendiği ve çalıştığı zamandır, ancak belki ağ hatası veya aptal bir hata (veya yazım hatası) nedeniyle programın zorla kapatılması gerektiğidir.

arabirimi, bazı Çalışma Zamanı hatalarını Derleme Zamanı hatalarına dönüştürmeye yardımcı olur, böylece bir hata yaptığınızı erkenden tanıyabilirsiniz.

daktiloda bazı örnek yazacağım. uygulama ayrıntılarını göz ardı ederseniz, yalnızca değişkenimizin türüyle ilgileniriz.

class T {t (): String {return ''} e (): String {return ''}} sınıf D {d (): String {return ''} e (): String {return ''}} işlevi iAcceptD (d: D): String {return dd (); } işlev iAcceptT (t: T): String {return td (); }

tamam, bu örnekte, typecript transpiler kodunuzu aktarmayı reddedecektir, çünkü `iAcceptT` fonksiyonunda` .d` olması beklenmemektedir.

aslında, otomatik tamamlamalı iyi bir IDE'de, 18. satırda size `te ()` ve `tt ()` diyebileceğinizi, ancak `td ()`

ama ne? .d () `ve` .t () `yerine fonksiyonumuz` .e () `yöntemi olduğu sürece herhangi bir değişkeni kabul edebilir.

arayüz burada geliyor.

şimdi kodumuzu şöyle yazabiliriz:

arayüz E {e (): String} sınıf D E {e () uygular: String {return ''} d (): String {return ''} f (): String {return ''}} sınıf T E { e (): {return ''} dizesi f (): {return '' t (): String {return ''}} dizesi

çünkü artık hem D hem de T'nin E uyguladığını biliyoruz, şimdi E'yi kabul eden bir fonksiyona sahip olabiliriz:

işlev iAcceptE (e: E): String {return ee (); }

Bununla birlikte, `iAcceptE` sadece E'nin sadece“ .e () `yöntemine sahip olduğunu bildiğinden, hem D hem de T'nin sahip olmasına rağmen` ed () `veya hatta ef () 'gibi bir şeyi çağırmanıza izin verilmez. .f () `nin kendi uygulaması.

nesnenizin "iAcceptE" ye kabul edilmesini istiyorsanız, yapıcısı E'yi uygulayan bir şey olmalıdır (örtük veya açık olarak). E uygularsa, aynı imzalı `.e ()` yöntemine sahip olunması garanti edilir (örneğin: argüman almaz ve bir String döndürür), böylece çağrılabilir.

undefined ve null gibi şeyler için bir uyarı var, ancak günümüzde birçok yazılı programlama dilinin bu değişkenin büyük olasılıkla boş olduğunu işaretlemek için kendi yolları var, bu yüzden bunu ele almalısınız, aksi takdirde derleyiciniz bunu derlemeyi reddedecektir.

tüm bunlar, sadece programınızı derlemeden önce olur.

Derlendikten sonra, her şey göz ardı edilecektir. siktir türü? özellikle fuck arayüzü nedir? Javascript'e aktarılan dakikanızdan sonra herhangi bir arayüz izini görmeyeceksiniz.

başka bir notta, yukarıdaki pasajın düz javascript ile karşılaştırılması

sınıf D {e () {dönüş ''} f () {dönüş ''} d () {dönüş ''}} sınıf T {e () {dönüş ''} f () {dönüş ''} t () {return ''}} sınıf X {e () {return ''}} işlev iAcceptT (t) {dönüş tt ()} işlev iAcceptD (d) {dönüş dd ()} işlev iAcceptE (e) {dönüş ee () } işlev iAcceptF (f) {return ff ()}

javascript'te, derleme zamanı denetimi olmadığından, herhangi bir nesneyi `iAcceptT`,` iAcceptD`, `iAcceptE` veya` iAcceptF` işlevlerine iletebilirsiniz.

ama şimdi, siz, programcı, her bir fonksiyona uygun değişkeni koyduğunuzdan emin olmaktan sorumlu olan sizsiniz.

javascript, böyle bir şey yapsanız bile programınızı çalıştırmayı reddetmez…

işlev maybeWillBeCalledSomeday () {iAcceptF (yeni X ())}

belki programınız iyi ve iyi çalışır, bir güne kadar 'maybeWillbeCalledSomeday` denir ve program durur.


cevap 2:

Kullanım ile arama süresinde kullanım demek istiyorsanız, fark yoktur.

Arayüzler aşağıdaki şeyler için kullanılır:

  • Birden fazla sınıf davranışı için yöntem imzası düzeyinde sözleşme, kurallar sağlayınBunun için miras kullanımını önleyin yönleri B''in kurallarını izliyor Bazı dillerde, yalnızca imza sağlamakla kalmaz, aynı zamanda arayüzün kendisinde arayüz yöntemlerinin uygulanmasını da sağlayabilirsiniz. Bu arabirimi izleyen sınıfta, yöntemi miras kalıbında olduğu gibi yeniden tanımlayabilir veya olduğu gibi bırakabilirsiniz

cevap 3:

Kullanım ile arama süresinde kullanım demek istiyorsanız, fark yoktur.

Arayüzler aşağıdaki şeyler için kullanılır:

  • Birden fazla sınıf davranışı için yöntem imzası düzeyinde sözleşme, kurallar sağlayınBunun için miras kullanımını önleyin yönleri B''in kurallarını izliyor Bazı dillerde, yalnızca imza sağlamakla kalmaz, aynı zamanda arayüzün kendisinde arayüz yöntemlerinin uygulanmasını da sağlayabilirsiniz. Bu arabirimi izleyen sınıfta, yöntemi miras kalıbında olduğu gibi yeniden tanımlayabilir veya olduğu gibi bırakabilirsiniz