[解決済み] インターフェースと抽象クラスの違いは何ですか?
質問
インターフェースと抽象クラスは具体的にどう違うのですか?
どのように解決するのですか?
インターフェイス
インターフェースは 契約 : インターフェイスを書く人は、" おいおい、そういう風に見えるのは受け入れるよ "と言い、インターフェースを使う人は ".と言う。 OK、私の書いたクラスはそのように見えます "。
インターフェースは空のシェル . メソッドのシグネチャがあるだけで、メソッドにはボディがないことを意味します。インターフェイスは何もできないのです。単なるパターンです。
例えば(擬似コード)。
// I say all motor vehicles should look like this:
interface MotorVehicle
{
void run();
int getFuel();
}
// My team mate complies and writes vehicle looking that way
class Car implements MotorVehicle
{
int fuel;
void run()
{
print("Wrroooooooom");
}
int getFuel()
{
return this.fuel;
}
}
なぜなら、クラスではなく、単に名前の束なので、高価なルックアップを行う必要がないからです。組み込み機器など、重要な場合に最適です。
抽象クラス
抽象クラスは、インターフェースとは異なり、クラスです。継承する際にルックアップが必要なため、利用するにはコストがかかります。
抽象クラスはインターフェースとよく似ていますが、それ以上のものを持っています。抽象クラスの振る舞いを定義することができるのです。どちらかというと、人が言う、" これらのクラスは、そのように見えるはずで、その共通点を持っているので、空白を埋めてください! ということです。
例えば
// I say all motor vehicles should look like this:
abstract class MotorVehicle
{
int fuel;
// They ALL have fuel, so lets implement this for everybody.
int getFuel()
{
return this.fuel;
}
// That can be very different, force them to provide their
// own implementation.
abstract void run();
}
// My teammate complies and writes vehicle looking that way
class Car extends MotorVehicle
{
void run()
{
print("Wrroooooooom");
}
}
実装
抽象クラスとインターフェースは異なる概念であるはずですが、実装を見るとその言葉が嘘のようになることがあります。時には、あなたが考えているようなものでさえないこともあります。
Javaではこのルールが強く適用されていますが、PHPではインターフェイスはメソッドが宣言されていない抽象クラスです。
Pythonでは、抽象クラスはABCモジュールから得られるプログラミングのトリックというより、実際にはメタクラス、したがってクラスを使用しています。そして、インターフェースは、この言語におけるダックタイピングにより関連しており、それは、規約と記述子を呼び出す特別なメソッド(__method__メソッド)の間に混在しているのです。
プログラミングの常として、理論があり、実践があり、別の言語での実践がある :-)
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み] インターフェースとベースクラス
-
[解決済み] Pythonにおける抽象クラスとインターフェースの違い
-
[解決済み】「結合度が低く、結合度が高い」とはどういう意味ですか?
-
[解決済み] Delegateとは?[クローズド]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 関数型プログラミングとオブジェクト指向プログラミングの比較【終了しました
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み】「結合度が低く、結合度が高い」とはどういう意味ですか?
-
[解決済み】依存関係逆転の原則とは何ですか、なぜそれが重要なのですか?
-
[解決済み] ProxyパターンとDecoratorパターンの違い
-
[解決済み] メソッドチェイニング - なぜ良い習慣なのか、そうでないのか?
-
[解決済み] プライベートとプロテクト-ビジビリティ・グッド・プラクティスの懸念点【終了しました
-
[解決済み] 継承と集計の比較【終了しました
-
[解決済み] nullを返すのは設計ミス?[クローズド]