2016-04-08 8 views
1

WordWeb辞書によると、「拡張」は「範囲、範囲または領域の増加」を意味します。したがって、このことを念頭に置いて継承を行うと、派生クラスは単純に基本クラスの属性と関数を増やします。しかし、実際に継承をしながら、私たちはこのコンセプトを変えます。たとえば、基底クラスでは、各内部関数がプライベートメンバーにアクセスできますが、派生クラスではこの動作が変更され、派生クラスの関数は親のプライベートデータメンバーにアクセスできません。ですから、「継承」をベースクラスの「拡張」と呼ぶ方法と時期を説明してください。継承をクラスのEXTENDとして呼び出すことは適切ですか?

ありがとうございます。

+1

は全く関係ありませんが、方法でそれは次のようになります。https://en.wikipedia.org/wiki/Liskov_substitution_principleリンクの – zegkljan

+0

感謝を。私はあなたが何とか私の意見を持っていると思うが、私はそれを明確に関連付けることはできない。また、基本クラスを拡張するというだけでなく、「拡張」が正しくない可能性があるため、すべての継承を「部分拡張」として明示的に指定する必要はありませんか? – dplank

+1

あなたはあまりにもしっかりと言葉に固執していると思います。 「拡張」は、あるクラスを別のクラスから継承させる単なる(キー)単語です。私は、 "extend"が使われていると思います。なぜなら、通常はそのクラスがあり、私たちはクラスを持っており、より多くのことを行うことができる別のクラスを作りたいからです。また、あなたの「コンセプトの変更」も疑問です。はい、サブクラスの中には少し異なるコンセプトがありますが、(サブ)クラスの外から、サブクラスが置換原則に準拠する場合、コンセプトは同じままです。 – zegkljan

答えて

0

プライベートなものはすべてクラスに属しているため、継承することはできません。継承によって、他のアクセス修飾子で公開されているかアクセス可能なすべてのものにアクセスできます。簡単な言葉では、継承されたクラスは、それを継承する他のクラスと共有することができるものを共有していることを意味します。 Javaや他のオブジェクト指向言語の基本概念の1つであるため、詳細を読むことをお勧めします(実際には言語に関係なく、オブジェクト指向プログラミングに関連しています)。

+0

ありがとう、しかし、私の質問は継承の概念には関係しませんが、質問は "継承"と "拡張"という単語の意味を関連づけています。継承を行うことによって、基本クラスを単純に拡張するのではなく、内部的な振る舞いも変更するためです。 – dplank

1

コードでは、基本クラスのメソッドとプロパティにアクセスできます。継承したクラスとして、あなたもあなたを与えることができるしている

私はその後

public class B : A 
{ 
public B() 
{ 
MakeSauce(); 
} 
} 

public class A 
{ 
public void MakeSauce() {} 
} 

を得た場合には、それはそれはしかし、Aから継承されたメソッドを呼び出している有効なコンストラクタであり、 MakeSauceに自分自身の "ひねり"を与えます。

I.e.

public class A 
{ 
public virtual void MakeSauce() { Console.WriteLine("I made sauce!"} 
} 

はその後

class B : A 
{ 
    public B() 
    { 
     MakeSauce(); // call A's implementation 
    } 

    public override void MakeSauce() // override A implementation 
    { 
     Console.WriteLine("I made 2 gallons of sauce."); 
    } 
} 
関連する問題