タグ付けされた質問 「interface」

インターフェースは、コンポーネントとの相互作用の指定されたポイントを指します。インターフェイスは、ハードウェアレベルとソフトウェアレベルの両方で適用できます。---これは、Java、C#、および同様の言語での単一継承の唯一の例外である、言語要素の「インターフェース」も指します。


30
インターフェイスと抽象クラス(一般的なOO)
最近、電話インタビューを2回行ったところ、インターフェースと抽象クラスの違いについて尋ねられました。私は考えられるすべての側面について説明しましたが、彼らは私が特定のことを述べるのを待っているようで、それが何であるかわかりません。 私の経験から、次のことが正しいと思います。重要な点が足りない場合はお知らせください。 インターフェース: インターフェースで宣言されたすべてのメソッドは、サブクラスで実装する必要があります。インターフェイスに存在できるのは、イベント、デリゲート、プロパティ(C#)、およびメソッドのみです。クラスは複数のインターフェースを実装できます。 抽象クラス: サブクラスでは、抽象メソッドのみを実装する必要があります。Abstractクラスは、実装を伴う通常のメソッドを持つことができます。抽象クラスは、イベント、デリゲート、プロパティ、メソッドの横にクラス変数を持つこともできます。C#にはマルチ継承が存在しないため、クラスは1つの抽象クラスしか実装できません。 結局のところ、インタビュアーは「抽象メソッドのみを持つ抽象クラスがあるとしたらどうでしょうか?それはインターフェースとどう違うのですか?」私は答えを知りませんでしたが、それは上記のように継承だと思いますか? 別のインタビュアーから、インターフェイス内にパブリック変数がある場合、抽象クラスとどう違うのかと尋ねられました。インターフェイス内にパブリック変数を含めることはできないと私は主張しました。私は彼が何を聞きたいのか知りませんでしたが、彼も満足していませんでした。 以下も参照してください。 抽象クラスの代わりにインターフェースを使用する場合、およびその逆の場合 インターフェースと抽象クラス 抽象クラスとインターフェースのどちらを使用するかをどのように決定しますか? インターフェイスと抽象クラスの違いは何ですか?

30
「インターフェイスにプログラムする」とはどういう意味ですか?
これについて何度か言及しましたが、その意味がよくわかりません。いつ、なぜこれを行うのですか? 私はインターフェースが何をするのか知っていますが、これがはっきりしないので、それらを正しく使用することに失敗していると思います。 あなたがやろうと思ったなら、それはそうですか? IInterface classRef = new ObjectWhatever() を実装する任意のクラスを使用できますかIInterface?いつそれを行う必要がありますか?私が考えることができる唯一のことは、あなたがメソッドを持っていて、それが実装することを除いて、どのオブジェクトが渡されるかわからない場合ですIInterface。どれくらいの頻度でそうする必要があるか、私には思えません。 また、インターフェイスを実装するオブジェクトを受け取るメソッドをどのように記述できますか?それは可能ですか?


30
インターフェイスと基本クラス
いつインターフェイスを使用する必要があり、いつ基本クラスを使用する必要がありますか? メソッドの基本実装を実際に定義したくない場合は、常にインターフェースにする必要がありますか? 犬と猫のクラスがある場合。PetBaseの代わりにIPetを実装したいのはなぜですか?IShedsまたはIBarks(IMakesNoise?)のインターフェースをペットごとに配置できるため、それらを使用できることは理解できますが、一般的なペットにどのインターフェースを使用すればよいかわかりません。


12
C#インターフェイス。暗黙的な実装と明示的な実装
C#で暗黙的および明示的にインターフェイスを実装する際の違いは何ですか? いつ暗黙を使用し、いつ明示を使用する必要がありますか? どちらか一方に賛否両論はありますか? Microsoftの公式ガイドライン(Framework Design Guidelinesの最初の版から)は、コードに予期しない動作を与えるため、明示的な実装の使用は推奨されていません。 このガイドラインは、IoC以前の場合、インターフェースとして物を渡さないときに非常に有効だと思います。 誰かがその側面についても触れることができますか?
632 c#  .net  interface 



15
使用するタイミング:Java 8+インターフェースのデフォルトメソッドと抽象メソッド
Java 8では、Default Methodsと呼ばれるインターフェースでメソッドのデフォルト実装が可能です。 私は(with )interface default methodではなく、そのようなをいつ使用するのか混乱しています。abstract classabstract method(s) では、デフォルトのメソッドとのインターフェースをいつ使用し、抽象クラス(抽象メソッドを含む)をいつ使用する必要があるのでしょうか。抽象クラスはそのシナリオでもまだ役に立ちますか?

24
Javaインターフェースで静的メソッドを定義できないのはなぜですか?
編集: Java 8以降、静的メソッドがインターフェースで許可されるようになりました。 次に例を示します。 public interface IXMLizable<T> { static T newInstanceFromXML(Element e); Element toXMLElement(); } もちろん、これは機能しません。しかし、なぜですか? 考えられる問題の1つは、電話をかけるとどうなるかです。 IXMLizable.newInstanceFromXML(e); この場合、空のメソッド(つまり、{})を呼び出すだけでよいと思います。すべてのサブクラスは静的メソッドを実装する必要があるため、静的メソッドを呼び出すときにはすべて問題ありません。では、なぜこれができないのでしょうか。 編集:私は「Javaのやり方だから」よりも深い答えを探していると思います。 静的メソッドを上書きできない特定の技術的な理由はありますか?つまり、Javaの設計者がインスタンスメソッドをオーバーライド可能にして静的メソッドにしないことにしたのはなぜですか。 編集:私のデザインの問題は、インターフェイスを使用してコーディング規約を強制しようとしていることです。 つまり、インターフェースの目的は2つあります。 IXMLizableインターフェイスを実装して、それを実装するクラスをXML要素に変換できるようにしたい(ポリモーフィズムを使用して、うまく機能する)。 IXMLizableインターフェイスを実装するクラスの新しいインスタンスを作成したい場合は、newInstanceFromXML(Element e)静的コンストラクターがあることが常にわかります。 インターフェースにコメントを入力する以外に、これを確実にする他の方法はありますか?


29
インターフェイスと抽象クラスの違いをどのように説明すればよいですか?
インタビューの1つで、インターフェイスと抽象クラスの違いを説明するように求められました。 これが私の返答です: Javaインターフェースのメソッドは暗黙的に抽象的であり、実装を持つことはできません。Java抽象クラスには、デフォルトの動作を実装するインスタンスメソッドを含めることができます。 Javaインターフェースで宣言された変数は、デフォルトではfinalです。抽象クラスには、非final変数が含まれる場合があります。 Javaインターフェースのメンバーはデフォルトでパブリックです。Java抽象クラスは、private、protectedなどの通常のクラスメンバーのフレーバーを持つことができます。 Javaインターフェースは、キーワード「implements」を使用して実装する必要があります。Java抽象クラスは、キーワード「extends」を使用して拡張する必要があります。 インターフェースは別のJavaインターフェースのみを拡張でき、抽象クラスは別のJavaクラスを拡張して複数のJavaインターフェースを実装できます。 Javaクラスは複数のインターフェースを実装できますが、拡張できる抽象クラスは1つだけです。 しかしインタビュアーは満足せず、この記述は「本好きの知識」を表すものだと私に言った。 実用的な例を使用して、インターフェイスより抽象クラスをいつ選択するかを説明し、より実用的な対応を求められました。 どこで私は間違えましたか?

15
インターフェースのメソッド実装を@オーバーライドする必要がありますか?
インターフェイスメソッドを実装するメソッドに注釈を付ける必要があり@Overrideますか? javadocのOverride注釈は言います: メソッド宣言がスーパークラスのメソッド宣言をオーバーライドすることを目的としていることを示します。メソッドにこのアノテーションタイプでアノテーションが付けられているが、スーパークラスメソッドをオーバーライドしない場合、コンパイラーはエラーメッセージを生成する必要があります。 インターフェイスは厳密にはスーパークラスだとは思いません。またはそれは? Question Elaboration


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.