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

コンピュータサイエンスでは、ポリモーフィズムは、さまざまなデータ型の値を統一された方法で処理できるようにするプログラミング言語の機能です。


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の動作であることを理解しています。私の質問はなぜですか?なぜポリモーフィズムは一般的に暗黙的ですが、ジェネリックになるとそれを指定する必要がありますか?


21
ポリモーフィズムvsオーバーライドvsオーバーロード
Javaに関して、誰かが尋ねると: ポリモーフィズムとは何ですか? 思いのオーバーロードまたはオーバーライド許容答えは? それだけではない。 実装のないメソッドを定義した抽象基本クラスがあり、そのメソッドをサブクラスで定義した場合でも、それはオーバーライドされますか? 過負荷は確かに正しい答えではないと思います。

4
派生クラスでオーバーライドされた関数が基本クラスの他のオーバーロードを隠すのはなぜですか?
コードを考えてみましょう: #include &lt;stdio.h&gt; class Base { public: virtual void gogo(int a){ printf(" Base :: gogo (int) \n"); }; virtual void gogo(int* a){ printf(" Base :: gogo (int*) \n"); }; }; class Derived : public Base{ public: virtual void gogo(int* a){ printf(" Derived :: gogo (int*) \n"); }; }; int main(){ …

17
継承とポリモーフィズムの主な違いは何ですか?
今日、モジュールの終わりに開かれた本の試験でこの質問が出され、私は迷っていました。私は読んでいてHead first Java、両方の定義がまったく同じであるように見えました。自分の心の中での主な違いは何だろうと思っていました。これと同様の質問がいくつかあることは知っていますが、決定的な答えを提供するものはありません。


11
Eclipse IDEのインターフェース実装に飛び込む
EclipseでF3メソッドを押すと、その宣言に移動する方法を知っていますか?まあ、私はインターフェイスの一部であるメソッドを持っています。これをクリックF3すると、当然、宣言インターフェイスに移動します。 明らかに、このインターフェースを実装するオブジェクトがあり、これがメソッドが実際に実装される場所です。を押すF3と、インターフェイス宣言ではなく、実装にジャンプします。コンパイル時に実装がわからない場合があることを知っているので、Eclipseがインターフェースを実装するすべてのクラスを表示して、実装するメソッドを選択して表示できるようにする方法はありますか?現在、これが発生しているときは、手動でこれを検索して、実装されているメソッドを見つけています。

5
既存の情報を保持しながら、異なるタイプとメッセージで例外を再発生させます
私はモジュールを書いていて、それが発生させることができる例外のために統一された例外階層を持ちたいと思っています(たとえばFooError、すべてのfooモジュールの特定の例外の抽象クラスから継承する)。これにより、モジュールのユーザーはこれらの特定の例外をキャッチし、必要に応じてそれらを明確に処理できます。ただし、モジュールから発生した例外の多くは、他の例外のために発生します。たとえば、ファイルのOSErrorが原因であるタスクで失敗する。 必要なのは、キャッチされた例外を「ラップ」して、タイプとメッセージが異なるようにすることです。これにより、例外をキャッチしたものは何であっても、伝播階層のさらに上位で情報を利用できます。しかし、既存のタイプ、メッセージ、スタックトレースを失いたくありません。これは、問題をデバッグしようとしている人にとってすべての有用な情報です。トップレベルの例外ハンドラーは、伝播スタックをさらに上に行く前に例外を装飾しようとしているため、トップレベルのハンドラーが遅すぎるため、上手ではありません。 これは、モジュールfooの特定の例外タイプを既存のタイプ(例:)から派生させることで部分的に解決されclass FooPermissionError(OSError, FooError)ますが、既存の例外インスタンスを新しいタイプでラップしたり、メッセージを変更したりすることは簡単ではありません。 PythonのPEP 3134「Exception Chaining and Embedded Tracebacks」では、既存の例外の処理中に新しい例外が発生したことを示すために、Python 3.0で「チェーン」例外オブジェクトとして受け入れられた変更について説明しています。 私がやろうとしていることは関連しています:以前のバージョンのPythonでも機能する必要があり、チェーニングのためではなく、ポリモーフィズムのためだけに必要です。これを行う正しい方法は何ですか?

12
Javaでは、派生クラスのオーバーライドメソッドから基本クラスのメソッドを呼び出す方法を教えてください。
私は2つのJavaクラスを持っています。Bは、次のように別のクラスAを拡張します。 class A { public void myMethod() { /* ... */ } } class B extends A { public void myMethod() { /* Another code */ } } 私は呼びたいでしょうA.myMethod()からB.myMethod()。私はC ++の世界出身ですが、Javaでこの基本的なことを行う方法がわかりません。

7
C ++でのポリモーフィズム
私の知る限り: C ++には、3つの異なるタイプのポリモーフィズムがあります。 仮想機能 関数名のオーバーロード オペレーターの過負荷 上記の3つのタイプの多型に加えて、他の種類の多型が存在します。 ランタイム コンパイル時 アドホックポリモーフィズム パラメトリック多態性 実行時のポリモーフィズムは仮想関数によって実現でき 、静的なポリモーフィズムはテンプレート関数によって実現できることを知っています しかし、他の2つについては アドホックポリモーフィズム ウェブサイトが言うパラメトリック多態性、 アドホックなポリモーフィズム: 使用できる実際のタイプの範囲が有限であり、使用前に組み合わせを個別に指定する必要がある場合、これはアドホックなポリモーフィズムと呼ばれます。 パラメトリック多態性: すべてのコードが特定の型について言及せずに記述されているため、任意の数の新しい型で透過的に使用できる場合、パラメトリックポリモーフィズムと呼ばれます。 私はそれらをほとんど理解できません:( 可能であれば、誰もが例でそれらの両方を説明できますか?この質問に対する回答が、大学の多くの新入生のために役立つことを願っています。


12
base.base.method()を呼び出す方法は?
// Cannot change source code class Base { public virtual void Say() { Console.WriteLine("Called from Base."); } } // Cannot change source code class Derived : Base { public override void Say() { Console.WriteLine("Called from Derived."); base.Say(); } } class SpecialDerived : Derived { public override void Say() { Console.WriteLine("Called …
126 c#  polymorphism 

5
C ++のプライベート仮想メソッド
C ++でプライベートメソッドを仮想化する利点は何ですか? 私はオープンソースのC ++プロジェクトでこれに気づきました: class HTMLDocument : public Document, public CachedResourceClient { private: virtual bool childAllowed(Node*); virtual PassRefPtr&lt;Element&gt; createElement(const AtomicString&amp; tagName, ExceptionCode&amp;); };

10
「ref」と「out」が多態性をサポートしないのはなぜですか?
次の点を考慮してください。 class A {} class B : A {} class C { C() { var b = new B(); Foo(b); Foo2(ref b); // &lt;= compile-time error: // "The 'ref' argument doesn't match the parameter type" } void Foo(A a) {} void Foo2(ref A a) {} } 上記のコンパイル時エラーが発生するのはなぜですか?これはrefとout引数の両方で発生します。

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