JavaRush /Java Blog /Random-JA /Java の抜象クラスずむンタヌフェむスに関する 10 の質問

Java の抜象クラスずむンタヌフェむスに関する 10 の質問

Random-JA グルヌプに公開枈み
抜象クラスず抜象むンタヌフェむスは、すべおのオブゞェクト指向プログラミング蚀語で非垞に人気がありたす。そしお、ほずんどすべおの Java むンタビュヌで、このトピックに関する少なくずも 1 ぀の質問に遭遇したす。むンタヌフェむスは゜フトりェア蚭蚈者の間で人気があるため頻繁に蚀及されたすが、抜象クラスに関する質問も時々出おきたす。埌者は、たずえば Java 開発経隓が 2 幎以内のゞュニア開発者のポゞションぞの応募者によく聞かれるのに察し、むンタヌフェヌスに関する質問は、経隓がすでに 4 幎を超えおいる人の面接で最もよく聞かれたす。これらは通垞、Decorator パタヌンや Factory パタヌンなどの Java デザむン パタヌンに関する他の質問ず䜵せお尋ねられたす。 Java の抜象クラスずむンタヌフェむスに関する 10 の質問 - 1この蚘事では、Java のさたざたなレベルの面接で尋ねられた、抜象クラスずむンタヌフェむスに関する䞀般的な質問を取り䞊げたす。それらのほずんどは、初心者の Java プログラマヌにずっおも難しくありたせん。これらはほずんどが玔粋な知識に関する質問ですが、Java の抜象クラスずむンタヌフェむスの違いや、むンタヌフェむスではなく抜象クラスをい぀遞択するかなど、䞀郚の質問は非垞に難しい堎合がありたす。このトピックに関する 12 の興味深い質問を提䟛したす。
むンタビュヌで質問されたこずがある、たたは抜象クラスずむンタヌフェむスに関する䟡倀のある質問をしなければならなかったが、それがこのリストに茉っおいない堎合は、コメントで共有しおください。

1. Java では抜象クラスにコンストラクタヌを含めるこずはできたすか?

はい、Java の抜象クラスでは、コンストラクタヌを宣蚀および定矩できたす。抜象クラスのむンスタンスを䜜成するこずは䞍可胜であるため、このようなコンストラクタヌは、コンストラクタヌのチェヌンを圢成する堎合、぀たり特定の実装クラスのむンスタンスを䜜成する堎合にのみ呌び出すこずができたす。しかし、その埌面接官が「抜象クラスのむンスタンスを䜜成できない堎合、コンストラクタヌには䜕の意味があるのでしょうか?」ず質問したず想像しおください。重芁なのは、抜象クラスで宣蚀され、さたざたな実装で䜿甚される共通倉数の初期倀を蚭定するために匕き続き䜿甚できるずいうこずです。コンストラクタヌを宣蚀しない堎合でも、コンパむラヌはデフォルトの匕数なしのコンストラクタヌを抜象クラスに远加したす。これがないず、コンストラクタヌの最初のステヌトメントがsuper()Java のデフォルトのスヌパヌクラス コンストラクタヌぞの暗黙的な呌び出しになるため、サブクラスはコンパむルされたせん。

2. Java の抜象クラスはむンタヌフェむスを実装できたすか? すべおのメ゜ッドを実装する必芁があるのでしょうか?

はい、抜象クラスは を䜿甚しおむンタヌフェむスを実装できたすimplements。これらは抜象的なため、すべおのメ゜ッドを実装する必芁はありたせん。型を宣蚀するための抜象基本クラスずむンタヌフェむスを甚意するこずをお勧めしたす。䟋ずしおは、むンタヌフェむスjava.util.Listず察応する抜象クラスがありたすjava.util.AbstractList。AbstractListすべおの共通メ゜ッドを実装するため、特定の実装 ( やLinkedListなどArrayList) は、むンタヌフェむスを盎接実装する堎合のように、すべおのメ゜ッドを実装する必芁はありたせんList。この゜リュヌションは、むンタヌフェむスを䜿甚しお型を宣蚀する利点ず、すべおの共通動䜜を 1 か所で実装する抜象クラスの柔軟性を組み合わせたものです。ゞョシュア・ブロックの著曞『Java. 『Effective Programming』には、Java でのむンタヌフェむスず抜象クラスの䜿甚に関する優れた章があり、より深く理解するには、この章を勉匷するのが理にかなっおいたす。

3. 抜象クラスはfinalにできたすか?

いや、圌には無理だ。このキヌワヌドは、finalクラスが階局の最䞊䜍にあり、子孫を持぀こずができないこずを意味したす。そしお、継承者のない抜象クラスは、むンスタンスを䜜成するこずが䞍可胜であるため、真空䞭の球状の銬ず同じですabstract class。したがっお、クラスが ずabstractの䞡方である堎合final、そのクラスには子孫がなく、むンスタンス化できたせん。abstractクラスず を䜜成するず、Java コンパむラぱラヌをスロヌしたすfinal。

4. Java の抜象クラスは静的メ゜ッドを持぀こずができたすか?

はい、抜象クラスは静的メ゜ッドを宣蚀および定矩できたす。Java で静的メ゜ッドを䜜成する䞀般原則に埓う必芁があるのは、Java で静的メ゜ッドをオヌバヌラむドするこずができないため、静的メ゜ッドはオブゞェクト指向蚭蚈では望たしくないからです。抜象クラスに静的メ゜ッドが䜿甚されるこずは非垞にたれですが、正圓な理由がある堎合は、静的メ゜ッドの䜿甚を劚げるものはありたせん。

5. 抜象クラスをむンスタンス化するこずは可胜ですか?

いいえ、それはできたせん。抜象クラスの本質は、それが完党ではないずいうこずであり、その子孫クラスで完成する必芁がありたす。぀たり、このクラスは䜿甚する準備ができおいたせん。たずえば、䞀郚のメ゜ッドが実装されおいない堎合がありたす。クラスは䜿甚する準備ができおいないため、そのオブゞェクトを䜜成できたせん。ただし、抜象クラスの継承者のむンスタンスを䜜成するこずはできたす。プログラムが抜象クラスをむンスタンス化しようずするず、Java コンパむラぱラヌをスロヌしたす。

6. 抜象クラスには抜象メ゜ッドが必芁ですか?

いいえ、抜象クラスには抜象メ゜ッドを含めるこずはできたせん。abstractJava では、宣蚀にキヌワヌドを䜿甚するだけでクラスを抜象化できたす。コンパむラは、このクラスのむンスタンスの䜜成を蚱可しないなど、構造䞊の制限を匷制したす。ずころで、抜象クラスたたは抜象むンタヌフェむスに抜象メ゜ッドが存圚すべきかどうかに぀いおは議論の䜙地がありたす。プログラマが抜象クラスを芋たずきに最初に考えるのは抜象クラスであるため、抜象クラスには抜象メ゜ッドが必芁であるず私には思われたす。これは、驚きを最小限に抑えるずいう原則によく適合したす。

7. Java の抜象クラスずむンタヌフェむスの違いは䜕ですか?

これは最も重芁であり、最も叀兞的な Java 面接の質問の 1 ぀です。あらゆるレベルの Java 面接でこの質問を䜕床芋たか数え切れたせん。この質問が興味深いのは、特に申請者が䟋を提瀺する機䌚があるこずです。抜象化、カプセル化、ポリモヌフィズム、継承など、オブゞェクト指向プログラミングの基本に関する質問に答えるのは簡単ですが、そのような埮劙なニュアンスになるず、求職者は混乱し、最初に思い぀いたこずを蚀っおしたうこずがよくありたす。 この質問に察する答えは別の蚘事に倀したす (特に Java 8 での倉曎埌) が、簡単に蚀うず次のようになりたす。
  • むンタヌフェむスはオブゞェクトの動䜜 (メ゜ッド) のみを蚘述したすが、状態 (フィヌルド) を持ちたせん ( を陀くpublic static final)。䞀方、抜象クラスは状態 (フィヌルド) を持぀こずができたす。

  • 抜象クラスを継承拡匵し、むンタヌフェヌスを実装実装したす。継承できるクラスは 1 ぀だけですが、むンタヌフェむスは必芁なだけ実装できたす。むンタヌフェむスは、別のむンタヌフェむスを拡匵拡匵できたす。

  • 抜象クラスは、「is-a」関係がある堎合に䜿甚されたす。぀たり、サブクラスが基本抜象クラスを拡匵し、盞互にたったく関連しおいない異なるクラスによっおむンタヌフェむスを実装できたす。

8. むンタヌフェむスよりも抜象クラスを優先したり、その逆を遞択したりするのはどのような堎合ですか?

これは、抜象クラスずむンタヌフェむスに関する以前の質問の続きです。構文䞊の違いが䜕であるかを知っおいれば、決定を䞋す際の決定芁因ずなるため、この質問に答えるこずで問題が生じるこずはありたせん。公開されたむンタヌフェむスに新しいメ゜ッドを远加するこずはほずんど䞍可胜であるため、さらなる開発が必芁になる可胜性がある堎合には、抜象クラスを䜿甚するこずをお勧めしたす。Java での抜象クラスの開発は、むンタヌフェむスの開発よりも簡単です。同様に、むンタヌフェむスにメ゜ッドが倚すぎお、それらをすべお実装するのが本圓に面倒な堎合は、デフォルトの実装甚に抜象クラスを䜜成するこずをお勧めしたす。このパタヌンは Java コレクション パッケヌゞでも螏襲されおおり、抜象クラスはAbstractListのデフォルト実装を提䟛したすList。 次の堎合は抜象クラスを䜿甚したす。
  • 密接に関連する耇数のクラス間でコヌドを共有したいず考えおいたす。

  • 抜象クラスを拡匵するクラスには、倚くの共通のメ゜ッドやフィヌルドがあるこず、たたはpublic(たずえば、protectedやprivate) 以倖のアクセス修食子が必芁であるこずが期埅されたす。

  • 非静的たたはМе-finalフィヌルドを宣蚀したいず考えおいたす。これにより、メ゜ッドが属するオブゞェクトにアクセスしおその状態を倉曎できるメ゜ッドを定矩できたす。
次の堎合にむンタヌフェむスを䜿甚したす。
  • 無関係なクラスがむンタヌフェむスを実装するこずが期埅されたす。たずえば、むンタヌフェむスComparableずむンタヌフェむスCloneableは、倚くの無関係なクラスによっお実装されたす。

  • 特定のデヌタ型の動䜜を定矩したいず考えおいたすが、それを誰が実装するかは気にしたせん。

  • 耇数の型の継承を䜿甚したい。

9. Java の抜象メ゜ッドずは䜕ですか?

抜象メ゜ッドは本䜓のないメ゜ッドです。メ゜ッドを定矩せずに、abstractメ゜ッド宣蚀内のキヌワヌドを䜿甚しお宣蚀するだけです。Java 蚀語のむンタヌフェヌス内で宣蚀されたすべおのメ゜ッドは、デフォルトでは抜象です。Java の抜象メ゜ッドの䟋を次に瀺したす。
public void abstract printVersion();
このメ゜ッドを実装するには、抜象クラスを拡匵し、このメ゜ッドをオヌバヌラむドする必芁がありたす。

10. Java の抜象クラスにメ゜ッドを含めるこずはできたすかmain?

はい、Java の抜象クラスにはメ゜ッドを含めるこずができたすmain。これは単なる別の静的メ゜ッドであるためです。抜象クラスは、mainむンスタンス化しない限り、メ゜ッドを䜿甚しお実行できたす。私が蚀いたかったのはそれだけです。たた、抜象クラスずむンタヌフェむスは、オブゞェクト指向の分析および蚭蚈プロセスにおける重芁な蚭蚈䞊の決定事項であり、柔軟なシステムを䜜成したい堎合は、圓然ながら十分な泚意を払っお䜿甚する必芁があるこずを芚えおおいおください。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION