web-dev-qa-db-ja.com

親クラスとスーパークラスの違い

親クラスとスーパークラスに違いはありますか?スーパークラスは、他のクラスから継承しない単なる親クラスですか?

16
Zach Latta

これは、用語の違いであり、親クラスと子クラス、またはスーパークラスとサブクラスの概念です。どちらを使用するか、またオブジェクト指向プログラミングを始めた時期は、プログラミング言語の経験とアプリケーションドメインに依存しているようです。

どちらの場合も、クラス、親クラス、スーパークラス、または基本クラスがあり、そこから他のクラス、子クラス、またはサブクラスが派生します。子クラスまたはサブクラスは、拡張されるクラスの既存の機能にいくつかの機能を追加することにより、親クラスまたはスーパークラスを拡張します。

super()は、Javaクラスの親またはスーパークラスコンストラクターが派生クラスで呼び出される方法です。

オブジェクト指向プログラミングの最初の数年間、さまざまな人々がこの地域で働き、論文や本を出版し、オブジェクト指向言語を開発したため、用語にかなりの混乱がありました。それはすべて非常に新しくてエキサイティングで、人々は使用する適切な語彙を決定しようとしていたので、オブジェクト指向の概念を表現するためにさまざまな単語やフレーズを試していました。

そして、開発されて人気を博している多くのオブジェクト指向プログラミング言語で、コミュニティは特定の語彙を持つ言語を中心に開発されました。そのため、早い段階でオブジェクト指向に夢中になっていた年配の経験豊富なプログラマーは、物事を少し違うと呼ぶかもしれません。

親と子は、他の種類のIs-AまたはHas-A関係の説明にも使用されます。たとえば、親ウィンドウと子ウィンドウは、ウィンドウである子が別のウィンドウである親に含まれているウィンドウシステムにも使用されます。したがって、親ウィンドウには子ウィンドウがあります。

7

これらは、同じOOP概念:継承。クラスChildClassParentClassを拡張する場合は次のように言うことができます。

  • ChildClass親クラスはParentClassです
  • ParentClassはChildClassのスーパークラスです

継承レベルはそこでは何の関係もありません。スーパークラス自体が別のクラスを拡張するかどうかは関係ありません。

同じだと思います。

直接親クラスと間接親クラスまたはスーパークラスを区別したい場合もありますが、これについても2つの用語が十分に明確ではないと思います。したがって、これが表現しようとしているものである場合は、明示することをお勧めします。

また、多くのプログラミング言語には、(単一の)直接の親クラスを参照するために使用される「super」キーワードがあります。しかし、そこでも、「スーパー」メソッドを呼び出して、直接の親がそれを実装しない場合、それもバブルします。

2
Thilo

それらは本質的に同じです。言語によって、用語が変わります。親は直接の親を意味する場合があり、スーパークラスは任意の祖先クラスを意味する場合があります。さらに、Javaには、親のコンストラクターを呼び出すsuper()メソッドがあります。

0
srini.venigalla