質問: interfaceクラスとabstractクラスの違いをどのように説明したらよいですか? 私のインタビューの1つでは、 interface と abstract class の違いを説明するように依頼されました。これが私の返事です: javaインタフェースのメソッドは暗黙的に抽象的であり、実装はできません。 java抽象クラスは、デフォルトの動作を実装するインスタンスメソッドを持つことができます。 javaインターフェースで宣言された変数は、デフォルトではfinalです。抽象クラスは、最終的ではない変数を含むことがあります。 javaインタフェースのメンバは、デフォルトでパブリックです。 java抽象クラスは、private、protectedなどのクラスメンバーの通常のフレーバーを持つことができます。 javaインターフェースは、キーワード「implements」を使用して実装する必要があります。 java抽象クラスは、キーワード「extends」を使用して拡張する必要があります。 インタフェースは他のjavaインタフェースのみを拡張でき、抽象クラスは他のjavaクラスを拡張して複数のjavaインタフェースを実装できます。 javaクラスは複数のインタフェースを実装できますが、拡張できる抽象クラスは1つだけです。 しかし、インタビュアーは満足しておらず、この記述は "bookish knowledge"を表していると私に言った。彼は私にもっと実用的な応答を求めて、{実際的な例を使って、インターフェースより抽象クラスを選ぶときを説明した。どこで私は間違えましたか?
回答: うーん今人々は卑劣な実用的なアプローチです、あなたは非常に正しいですが、インタビュアーのほとんどは彼らの現在のrequirmentに従って見え、実用的なアプローチを望んでいます。あなたの答えを終えた後、あなたは例に飛ぶべきです: 要約: たとえば、給与関数にはすべての従業員に共通のパラメータがあります。それから部分的に定義されたメソッド本体を持つctcと呼ばれる抽象クラスを持つことができます、そしてそれは従業員のすべてのタイプによって拡張されて、彼らの余分な牛肉によって再定義されるでしょう。一般的な機能性のために。public abstract class ctc { public int salary(int hra, int da, int extra) { int total; total = hra+da+extra; //incentive for specific performing employee //total = hra+da+extra+incentive; return total; } } class manger extends ctc { } class ceo extends ctc { } class developer extends ctc { } インターフェース javaのインターフェースはそれを拡張することなくinterfcae機能を持つことを可能にします、そしてあなたはあなたがあなたのアプリケーションで導入したい機能のシグネチャの実装で明確でなければなりません。それはあなたが定義を持つことを強制するでしょう。さまざまな機能のために。public interface employetype { public string typeofemployee(); } class contarctone implements employetype { @override public string typeofemployee() { return "contract"; } } class permanentone implements employetype { @override public string typeofemployee() { return "permanent"; } } 抽象クラスとして定義された方法によっても抽象クラスでそのような強制的なアクティビティを持つことができます。今や抽象クラスを継承するクラスは抽象クラスをオーバーライドするまで抽象クラスを継承します。