第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我該如何解釋Interface和Abstract類之間的區(qū)別?

我該如何解釋Interface和Abstract類之間的區(qū)別?

心有法竹 2019-08-14 16:14:08
我該如何解釋Interface和Abstract類之間的區(qū)別?在我的一次訪談中,我被要求解釋Interface和Abstract類之間的區(qū)別。這是我的回答:Java接口的方法是隱式抽象的,不能有實現(xiàn)。Java抽象類可以具有實現(xiàn)默認行為的實例方法。在Java接口中聲明的變量默認為final。抽象類可能包含非最終變量。默認情況下,Java接口的成員是公共的。Java抽象類可以具有類似私有,受保護等類通常的類成員。應使用關鍵字“implements”實現(xiàn)Java接口; 應使用關鍵字“extends”擴展Java抽象類。接口只能擴展另一個Java接口,抽象類可以擴展另一個Java類并實現(xiàn)多個Java接口。Java類可以實現(xiàn)多個接口,但它只能擴展一個抽象類。然而,面試官并不滿意,并告訴我這個描述代表了“ 書本知識 ”。他告訴我一個更實際的回答,解釋我何時會使用實際例子在界面上選擇一個抽象類。我哪里做錯了?
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經(jīng)驗 獲得超11個贊

我先給你舉個例子:

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

現(xiàn)在假設您的應用程序中有3個數(shù)據(jù)庫。然后,該數(shù)據(jù)庫的每個實現(xiàn)都需要定義上述兩種方法:

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}

但是如果encryptPassword()不依賴于數(shù)據(jù)庫,那么每個類都是一樣的呢?那么以上就不是一個好方法。

相反,請考慮這種方法:

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();}

現(xiàn)在在每個子類中,我們只需要實現(xiàn)一個方法 - 與數(shù)據(jù)庫相關的方法。

我盡我所能,希望這會清除你的疑慮。


查看完整回答
反對 回復 2019-08-14
?
蕪湖不蕪

TA貢獻1796條經(jīng)驗 獲得超7個贊

在這個世界上沒有什么是完美的。他們可能期待更多實用的方法。

但是在您的解釋之后,您可以使用稍微不同的方法添加這些行。

  1. 接口是規(guī)則(規(guī)則,因為您必須為它們提供一個您不能忽略或避免的實現(xiàn),以便它們像規(guī)則一樣強制執(zhí)行),這些規(guī)則在軟件開發(fā)中的各個團隊之間起著共同的理解文檔的作用。

  2. 接口提供了想要做什么但不知道如何做的想法。因此,實現(xiàn)完全依賴于開發(fā)人員遵循給定的規(guī)則(意味著給定方法的簽名)。

  3. 抽象類可以包含抽象聲明,具體實現(xiàn)或兩者。

  4. 抽象聲明就像要遵循的規(guī)則,具體實現(xiàn)就像指南(你可以按原樣使用它,或者你可以通過覆蓋并給它自己的實現(xiàn)來忽略它)。

  5. 此外,具有相同簽名的哪些方法可以改變不同上下文中的行為作為接口聲明被提供作為在不同上下文中相應地實現(xiàn)的規(guī)則。

編輯: Java 8有助于在接口中定義默認和靜態(tài)方法。

public interface SomeInterfaceOne {

    void usualAbstractMethod(String inputString);

    default void defaultMethod(String inputString){
        System.out.println("Inside SomeInterfaceOne defaultMethod::"+inputString);
    }}

現(xiàn)在當一個類實現(xiàn)SomeInterface時,并不是必須為接口的默認方法提供實現(xiàn)。

如果我們有另外一個接口,有以下方法:

public interface SomeInterfaceTwo {

    void usualAbstractMethod(String inputString);

    default void defaultMethod(String inputString){
        System.out.println("Inside SomeInterfaceTwo defaultMethod::"+inputString);
    }}

Java不允許擴展多個類,因為它導致“鉆石問題”,其中編譯器無法決定使用哪個超類方法。使用默認方法,接口也會出現(xiàn)菱形問題。因為如果一個類正在實現(xiàn)兩者

SomeInterfaceOne and SomeInterfaceTwo

并且沒有實現(xiàn)常見的默認方法,編譯器無法決定選擇哪一個。為了避免這個問題,在java 8中必須實現(xiàn)不同接口的通用默認方法。如果任何類正在實現(xiàn)上述接口,則必須為defaultMethod()方法提供實現(xiàn),否則編譯器將拋出編譯時錯誤。


查看完整回答
反對 回復 2019-08-14
  • 3 回答
  • 0 關注
  • 800 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號