SORU
13 EYLÜL 2013, Cuma


Nasıl bir Arayüz ve Soyut bir sınıf arasındaki fark izah edeyim mi?

Son zamanlarda bir arasındaki farkı açıklamak istemiştim çok uluslu bir şirket ile görüştüm, "Arayüz" ve "Soyut sınıf".

Bu röportajı daha önce hazırladığım bir soru. Cevap verdim:

Bir Java Arayüzü ana fark yöntemleri örtülü olarak soyut ve edemiyor uygulamaları var. Java soyut bir sınıf olabilir örnek yöntemleri varsayılan davranışı uygular.

Değişken bir Java arayüzü bildirilen varsayılan son gereğidir. Bir soyut sınıf nihai olmayan değişkenleri içerebilir.

Bir Java arayüzü üyeleri varsayılan olarak herkese açıktır. Bir Java soyut sınıf sınıf üyeleri gibi özel,her zamanki tat alabilir korumalı, vb

Arayüz uygulanmalıdır sözcüğünü kullanarak Java“”; uygular Soyut sınıf genişletilmeli sözcüğünü kullanarak Java“”.

Bir arayüz başka bir Java arayüzü sadece, soyut bir sınıf uzatabilirsiniz başka bir Java sınıfı genişletmek ve birden fazla Java arabirimleri uygulayabilirsiniz.

Java'da bir sınıf sadece uzatabilir ama birden fazla arayüzü uygulayabilir bir soyut sınıf.

Ancak, görüşmeci memnun değildi, ve bu açıklama temsil ettiğini söyledi "kitap bilgisi".

Daha pratik bir yanıt için bana bir arabirim üzerinden soyut bir sınıf, pratik örnekler kullanarak seçerdim ne zaman açıklama istedi.

Ben nerede yanlış yaptım?

CEVAP
13 EYLÜL 2013, Cuma


Size bir örnek ilk vereceğim:

public interface LoginAuth{
   public String encryptPassword(String pass);
   public void checkDBforUser();
}

Şimdi uygulamanızda 3 veritabanları olduğunu varsayalım. Sonra her kullanıcı için her uygulama yukarıda 2 yöntemlerini tanımlamak gerekir:

public class DBMySQL implements LoginAuth{
          // Needs to implement both methods
}
public class DBOracle implements LoginAuth{
          // Needs to implement both methods
}
public class DBAbc implements LoginAuth{
          // Needs to implement both methods
}

Ama encryptPassword (varsa) ne veritabanı bağımlı ve her sınıf için aynı şey değil mi? Yukarıdaki iyi bir yaklaşım olmaz.

Bunun yerine, bu yaklaşım göz önünde bulundurun:

public abstract class LoginAuth{
   public String encryptPassword(String pass){
            // Implement the same default behavior here 
            // that is shared by all subclasses.
   }

   // Each subclass needs to provide their own implementation of this only:
   public abstract void checkDBforUser();
}

Her çocuk sınıf içinde şimdi, bir tek yöntem - veritabanı bağımlı yöntemi uygulamak gerekir.

Elimden geleni ve bu şüpheleri temizleyin Umuyoruz çalıştım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • calicoJake

    calicoJake

    29 EKİM 2007
  • placeboing

    placeboing

    7 Mart 2006