19

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

4

5 に答える 5

12

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

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

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

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

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

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

于 2012-10-24T02:15:00.820 に答える
4

これらは、同じOOPの概念である継承に対応するための異なる用語です。クラスChildClassが拡張する場合は、次のParentClassように言うことができます。

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

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

于 2012-10-24T02:14:26.983 に答える
4

同じだと思います。

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

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

于 2012-10-24T02:12:15.857 に答える
1

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

于 2012-10-24T02:14:12.040 に答える
-1

Ruby言語では、両方の概念が異なることを意味します。

ParentClass -> ChildClass->これは名前空間に使用されます

SuperClass -> SubClass->これは継承に使用されます

以下の例:

ParentClass -> ChildClass

class A
  def self.f1
    puts "A -> #{self.name}.f1 called"
  end
  # B is childclass of A
  class B
    def self.f2
      puts "B -> #{self.name}.f2 called"
    end
  end
end

# C is subclass of A
class C < A
  def self.f3
    puts "C -> #{self.name}.f3 called"
    B.f2
  end
end

以下の出力を参照してください。

  1. C.f1

A->C.f1と呼ばれる

  1. C.f3

C->C.f3と呼ばれる

B-> A::B.f2と呼ばれる

于 2017-02-24T10:09:23.360 に答える