インターフェイスは、特定のメソッド セットが実装されることを保証します。インターフェイス自体は、コードがどのように実装されるかには関与しません。クラスを拡張するのとは対照的に、クラスを拡張するときは、定義済みのコードを使用しています。
たとえば、同じメソッドで 2 つのクラスを拡張し、methodA
このメソッドを呼び出すと、コンパイラはどちらを実行する必要があるかわかりません。一方、同じメソッドで 2 つのインターフェイスを実装する場合、実装は独自のコード内に記述されるため、コンパイラは実装を見つけるためにどこに行く必要があるかを認識します。
基本的に、何かを実装すると、何らかのサービスを提供することが保証されます。
編集:私はあなたの例を取り、オブジェクト指向の方法でそれを変えようとします。これはうまくいけば、物事をより明確にするでしょう。
ジャックとベンはあなたにお金を貸すことを保証しますが、あなたはそれを返すことを保証します。
public interface IPay
{
public void Pay(Individual i);
}
public class MySelf : IPay
{
public void Pay(Individual i)
{
...
}
}
public interface ILend
{
public void Lend(Individual i);
}
public class Jack : ILend //Same applies for Ben
{
public void Lend(Individual i)
{
...
}
}
これは、あなたが指定した問題に取り組む方法です。
他のゴミ箱の例については、次のように実行できます。
public interface ITakeTrash
{
public void TakeTrash(Trash t);
}
public Son : ITakeTrash
{
public void TakeTrash(Trash t);
}
public class Mum //Same applies for dad
{
Son mySon = ...
mySon.TakeTrash(t);
}
あなたのお母さんもお父さんもゴミの扱い方を知りませんが、あなたがゴミの処理方法を知っていることを知っており、それが彼らの関心事です (上記と同様に、あなたはベンとジャックがあなたに与えることができることだけを気にします)お金も他の当事者もあなたが返済できることだけを気にかけています。
基本的に、異なることを行う同じ名前のメソッドで2つの異なるインターフェースを実装するとどうなるかを言って、あなたがどこに行こうとしているのか理解しています。そのようなシナリオに陥った場合、それは設計の悪さによるものだと思います。無数の異なることを行う単一のクラスを構築することはお勧めしません。これが理由の 1 つです。
一方で、同じ名前のメソッドで同様のことを行う 2 つのインターフェースがあるとしたらどうなるでしょうか。次に、答えは、インターフェイスが同様のことを行い、同じ名前のメソッドがあるため、同じことをしている可能性が最も高いため、混乱する必要はないということだと思います。
この編集が問題の解明に役立つことを願っています。