タグ付けされた質問 「inheritance」

継承とは、オブジェクト指向プログラミングのシステムであり、オブジェクトは独自の定義を提供する必要なく、前の型によって定義された操作をサポートできます。これは、オブジェクト指向プログラミングにおけるポリモーフィズムの主要なベクトルです。


27
List <T>を継承しないのはなぜですか?
私のプログラムを計画するとき、私はしばしば次のような一連の思考から始めます。 サッカーチームは、サッカー選手のリストにすぎません。したがって、私はそれを次のように表現する必要があります: var football_team = new List&lt;FootballPlayer&gt;(); このリストの順序は、プレーヤーが名簿にリストされている順序を表しています。 しかし、後でチームが記録する必要があるのは、単なるプレーヤーのリストに加えて、他のプロパティもあることに気づきました。たとえば、今シーズンのスコアの累計、現在の予算、均一な色、stringチームの名前を表すなど。 だから私は思う: さて、サッカーチームは選手のリストのようなものですが、それに加えて、名前(a string)と現在の合計スコア(an int)があります。.NETはサッカーチームを格納するためのクラスを提供していないため、自分でクラスを作成します。最も類似し、関連する既存の構造はList&lt;FootballPlayer&gt;なので、それを継承します。 class FootballTeam : List&lt;FootballPlayer&gt; { public string TeamName; public int RunningTotal } しかし、ガイドラインでは、から継承してはならないList&lt;T&gt;ことがわかっています。このガイドラインは2つの点で完全に混乱しています。 何故なの? どうやらList、何らかの形でパフォーマンスが最適化されています。どうして?拡張すると、どのようなパフォーマンスの問題が発生しListますか?正確には何が壊れますか? 私が見たもう1つの理由Listは、Microsoftから提供されたものであり、私はそれを制御できないため、「パブリックAPI」を公開した後で後で変更することはできません。しかし、私はこれを理解するのに苦労しています。パブリックAPIとは何ですか。なぜ気にする必要があるのですか。現在のプロジェクトにこのパブリックAPIが含まれていない可能性がある場合、このガイドラインを無視しても安全ですか?私は、継承を行う場合List と、、それは私が公共のAPIを必要と判明し、どのような困難私が持っているのだろうか? なぜそれが重要なのですか?リストはリストです。何が変わる可能性がありますか?何を変更したいですか? そして最後に、Microsoftがからの継承を望まないのであればList、なぜ彼らはクラスを作らなかったのでしょうか。sealedですか? 他に何を使うべきですか? どうやら、カスタムコレクションの場合、Microsoft Collectionはの代わりに拡張する必要のあるクラスを提供していListます。しかし、このクラスは非常に裸であり、たとえばなどAddRange、多くの有用なものはありません。jvitor83の答えは、その特定のメソッドのパフォーマンスの根拠を提供しますが、遅いのAddRangeは遅いよりも良いですAddRangeどうしてですか からのCollection継承はList、からの継承よりもはるかに多くの作業であり、私には利点がないと思います。確かにMicrosoftは理由もなく余分な作業をするように言わないので、何かを誤解しているように感じずにはいられず、継承Collectionは私の問題の正しい解決策ではありません。 実装などの提案を見てきました IList。いいえ。これは何十行ものボイラープレートコードで、何も得られません。 最後に、List何かを何かにラップすることを提案する人もいます: class FootballTeam { public List&lt;FootballPlayer&gt; Players; } これには2つの問題があります。 それは私のコードを不必要に冗長にします。my_team.Players.Countただ電話をする代わりに今すぐ電話しなければなりませんmy_team.Count。ありがたいことに、C#を使用すると、インデックス作成を透過的にするようにインデクサーを定義し、内部のすべてのメソッドを転送できますList...しかし、これは大量のコードです。すべての作業で何が得られますか? それだけでは意味がありません。サッカーチームは、選手のリストを「持っていません」。これは、ある選手のリスト。「John McFootballerがSomeTeamのプレーヤーに参加した」とは言わないでください。あなたは「ジョンがSomeTeamに参加した」と言います。「文字列の文字」に文字を追加するのではなく、文字列に文字を追加します。図書館の本に本を追加するのではなく、本を図書館に追加します。 …
1400 c#  .net  list  oop  inheritance 

7
type()とisinstance()の違いは何ですか?
これら2つのコードフラグメントの違いは何ですか? 使用type(): import types if type(a) is types.DictType: do_something() if type(b) in types.StringTypes: do_something_else() 使用isinstance(): if isinstance(a, dict): do_something() if isinstance(b, str) or isinstance(b, unicode): do_something_else()
1248 python  oop  inheritance  types 


3
AngularJSのスコープのプロトタイプ/プロトタイプの継承のニュアンスは何ですか?
APIリファレンスScopeページは言います: スコープは親スコープから継承できます。 開発者ガイドScopeページは言います: スコープは(典型的には)親スコープからプロパティを継承します。 では、子スコープは常に親スコープからプロトタイプを継承しますか? 例外はありますか? 継承する場合、それは常に通常のJavaScriptプロトタイプの継承ですか?



17
List <Dog>はList <Animal>のサブクラスですか?Javaジェネリックが暗黙的にポリモーフィックでないのはなぜですか?
Javaジェネリックスが継承/ポリモーフィズムをどのように処理するかについて少し混乱しています。 次の階層を想定- 動物(親) 犬 - 猫(子供) それで私がメソッドを持っているとしましょうdoSomething(List&lt;Animal&gt; animals)。継承とポリモーフィズムのすべてのルールでは、私はそれを引き受けるList&lt;Dog&gt; さList&lt;Animal&gt;とList&lt;Cat&gt; あるList&lt;Animal&gt;ので、どちらかがこのメソッドに渡すことができます- 。そうではありません。この動作を実現したい場合は、と言って、Animalのサブクラスのリストを受け入れるようにメソッドに明示的に指示する必要がありますdoSomething(List&lt;? extends Animal&gt; animals)。 これはJavaの動作であることを理解しています。私の質問はなぜですか?なぜポリモーフィズムは一般的に暗黙的ですが、ジェネリックになるとそれを指定する必要がありますか?



15
子クラスから親クラスのメソッドを呼び出しますか?
Pythonで単純なオブジェクト階層を作成するとき、派生クラスから親クラスのメソッドを呼び出せるようにしたいと思います。PerlとJavaには、このためのキーワードがあります(super)。Perlでは、私はこれを行うかもしれません: package Foo; sub frotz { return "Bamf"; } package Bar; @ISA = qw(Foo); sub frotz { my $str = SUPER::frotz(); return uc($str); } Pythonでは、親クラスに子から明示的に名前を付ける必要があるようです。上記の例では、のようにする必要がありFoo::frotz()ます。 この動作では深い階層を作成することが困難になるため、これは正しくないようです。子供が継承されたメソッドを定義したクラスを知る必要がある場合は、あらゆる種類の情報の苦痛が生じます。 これはPythonの実際の制限ですか、私の理解のギャップですか?

7
派生クラス関数から親クラス関数を呼び出す方法は?
C ++を使用して派生クラスから親関数を呼び出すにはどうすればよいですか?たとえば、というクラスとparent、child親から派生したというクラスがあります。各クラス内にはprint関数があります。子の印刷関数の定義で、親の印刷関数を呼び出したいと思います。これを行うにはどうすればよいですか?
604 c++  oop  inheritance 

9
Pythonで「スーパー」は何をしますか?
違いは何ですか: class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() そして: class Child(SomeBaseClass): def __init__(self): SomeBaseClass.__init__(self) super継承が1つしかないクラスで非常に多く使用されているのを見てきました。なぜ多重継承で使用するのかはわかりますが、このような状況で使用することの利点についてははっきりしません。
564 python  oop  inheritance  super 



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.