JavaRush /Java Blog /Random-TW /為什麼需要介面繼承?
Павел
等級 11

為什麼需要介面繼承?

在 Random-TW 群組發布
為什麼需要接口? 為什麼需要介面繼承? 為什麼需要多態性? 對於那些閱讀並理解如何進行介面繼承,但不明白為什麼的人。上次我們以普通伊凡諾夫家族為例,了解為什麼需要介面。我們繼續將陷入困境的家庭數位化。每個人都有一些他沒有從任何人那裡遺傳或遺傳給任何人的習慣——他的個人習慣。我們的任務是為每個家庭成員提供獨特的習慣。讓我們轉向 Java 層面:我們需要在類別中實作僅屬於這些類別的獨特方法。好吧,繼續吧!這是彼佳:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
這是爸爸:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
這是媽媽:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
完美的!一切都按其應有的方式進行!第一篇文章中說過,程序是現實世界的反映。現實最有趣的特性是它一直在改變。伊凡諾夫家族也不例外;他們有一個可愛的女兒,名叫瑪莎。她從媽媽那裡繼承了眨眼睫毛、從爸爸那裡抽鼻子的習慣。我們需要改變我們的計劃。 為什麼需要介面繼承? - 1算了,其實沒那麼難,最主要的是邏輯思考。畢竟,每個人都知道為什麼需要介面。現在讓我們建立一個介面 Masha's Habits,描述其中的clapElashes()squish()方法,將其實作給Masha,我們就完成了。那如果其他介面中已經實作了同名的方法呢,一次性就可以了。 為什麼需要介面繼承? - 2確實,誰知道伊凡諾夫家族有什麼打算,如果謝廖札出生了,他會繼承爸爸、媽媽、曾祖父和其他第四代的習慣,每次都會創造一個介面,例如:介面謝廖扎的習慣,還有聲明已經可以在其他介面中聲明數百次的方法?在幾代人或三代的時間裡,我們可能會面臨使用其他介面中已經描述的一堆相同方法的介面的風險,並且如果我們需要更改某些習慣的名稱(這是很有可能的- 畢竟世界正在改變) ,那麼這個義大利麵是怎麼算出來的,我不敢想像。剩下的就是坐下來夢想奇蹟。 為什麼需要介面繼承? - 3現在,如果每個習慣都有自己的介面。讓我們想像一下:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
然後,就像在樂高中一樣,我們可以使用個人習慣的多重繼承,鍵入家庭中單一成員的習慣所需的介面。像這樣的東西:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
然後簡單地實作所需的介面到所需的類別,例如,Mom:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
爸爸、彼佳和瑪莎 也可以這麼做。然後,隨著伊凡諾夫家族的壯大,習慣上就不會有問題了,我們只需在介面層面透過繼承進行洗牌,就像沙拉里的配料一樣,不會產生一堆同名的方法。呃,夢想,夢想…… 為什麼需要介面繼承? - 4畫的人是對的,這其實是可能的——現在伊凡諾夫家族的模擬得救了!細心的讀者可能會問:“為什麼要為每個家庭成員創建接口?我們有一組操作 - 立即為所需的類實現它們。” 讓我們想像一下,在許多平行世界中都有Petya 的替身,並且所有Petya都需要實作介面 Petya 的習慣
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
如果沒有通用介面怎麼辦?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
這會導致更多重複的程式碼。介面繼承使得應用程式的改變更加靈活,特別是可以解決重複方法的問題。請再次注意,介面的多重繼承是允許的。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION