問題タブ [polymorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
15193 参照

php - PHP のポリモーフィズムのように見えるものは、本当にポリモーフィズムなのですか?

PHP がメソッドのオーバーロード、継承、ポリモーフィズムなどの機能をサポートしているかどうかを調べようとしたところ、次のことがわかりました。

  • メソッドのオーバーロードをサポートしていません
  • 継承をサポートします

しかし、ポリモーフィズムについてはよくわかりません。私はこれをインターネットでグーグルで見つけました:

PHP では、ポリモーフィズムが本来あるべき形ではないことに注意してください。機能するということですが、データ型が弱いため、正しくありません。

では、それは本当にポリモーフィズムなのでしょうか?

編集 の隣に明確な YES または NO を配置することはできませんPHP supports polymorphism。「PHP はポリモーフィズムをサポートしていません」と述べるのは気が進まないでしょうが、実際にはそうです。またはその逆。

0 投票する
5 に答える
2601 参照

c++ - ポリモーフィズム (C++) での実変数型のチェック

クラス A があり、クラス B と C がそれを継承しているとします。次に、A への参照の配列を作成し、B と C で埋めます。ここで、すべての C を削除することにしました。returnType() 関数のような冗長なことをせずに、配列の各フィールドが実際に保持している型を確認する方法はありますか?

編集:「Aの配列」を「Aへの参照の配列」に修正しました。

0 投票する
7 に答える
16765 参照

c# - ベースクラス オブジェクトでサブクラス メソッドを呼び出すにはどうすればよいですか?

私は、一連のクラスを生成するライブラリを使用しています。

これらのクラスはすべて共通の基本クラスから継承されますが、その基本クラスはすべてのサブクラスに共通するいくつかのメソッドを定義していません。

例えば:

残念ながら、基本クラスにはこれらのメソッドがありません。これは素晴らしいでしょう:

私の A+B オブジェクトには共通の基本クラスがあり、Item オブジェクトには共通の基本クラスがあるので、ポリモーフィズムの素晴らしい世界から恩恵を受けることを望んでいました。

残念ながら、一般的なメソッドは基本クラスに実際には存在しないため、仮想的に呼び出すことはできません。たとえば、これは完璧です:

明らかにキャストは機能しますが、その場合、メリットを無効にするタイプを知る必要があります。

これらのメソッドの呼び出しを「強制」するにはどうすればよいですか? 呼び出そうとしているメソッドを実装していないオブジェクトを取得する心配はありません。私は実際にVBでやりたいことをすることができます - 私はインテリセンスを得ることはできませんが、コンパイラは満足して動作します:

繰り返しますが、私はこれらのクラスを制御することはできません (部分クラスを除外すると思います)。

0 投票する
7 に答える
3270 参照

java - Java:オーバーロードが速いかif / else

私には子クラスがあり、それぞれが他のメンバーと一緒に異なるタイプの価値を持っています。LongObject、IntObject、StringObjectなどが存在する可能性があります。

long、int、stringなどの値が与えられ、それぞれLongObject、IntObject、StringObjectなどを作成する必要があります。

以下に示すようにメソッドをオーバーロードする方が速いでしょうか(a)、または以下に示すようにelseifを使用するだけですか(b)?

目立ったパフォーマンスの違いではない場合があります。とにかく、オーバーロードされたメソッドはif/elseと同様の方法で実装されている可能性があります。知らない。

ただテストするように言っている人もいます。確かに、私はすべきです。また、誰かが知っているなら、このタイプのオーバーロードが内部でどのように処理されるかを知りたいです。

ご意見をお聞かせください。

ありがとう、jbu

a)

b)

編集:私はすべての詳細を完全に追加しなかったと思います、あなたの何人かはそれを捕まえました。どちらの選択肢でも、オブジェクト/値を取得し、その値からそれがどのタイプであるかを判断する必要があります。したがって、オーバーロードされたメソッドを使用するためにも、何らかのif/elseを実行する必要があります。

0 投票する
3 に答える
721 参照

java - 派生クラスがオーバーライドされたメソッドで特殊な型を持つことができるのはなぜですか?

この基本クラスがあるとしましょう:

驚いたことに、派生クラスでこれを行うことができました。

しかし、私はこれを行うことができませんでした:

ここで何が起きてるの?特殊な戻り値の型を使用できるのに、特殊なパラメーターの型を使用できないのはなぜですか?

さらにややこしいのは、 の元の宣言を保持するとload、それをより特殊な型に割り当てることができるということです。

0 投票する
6 に答える
4463 参照

java - 基本クラス メソッドの強制呼び出し

次のコードを実行すると、明らかに「B1/A2/B2」が出力されます。現在、代わりに「A1/A2/B2」を出力することは可能ですか (つまり、A#method2() は B ではなく A で method1() を呼び出す必要があります)。

注: ポリモーフィズムをパスする必要はありません。この質問は単なる好奇心からのものです。

0 投票する
4 に答える
932 参照

java - インターフェイス オブジェクトを必要とするコンストラクターを持つクラスをインスタンス化する方法

Interactive Brokers Java API を使用して、(最初は紙の上で) アルゴリズム取引を実行できるかどうかを確認しようとしています。ReqMktDepth()というクラスにあるというメソッドを呼び出したいと思いEClientSocketます。

コンストラクターは型のEClientSocketオブジェクトをAnyWrapper渡す必要がAnyWrapperあり、具体的なクラスではなくインターフェイスです。AnyWrapper理論的には、クラスをEClientSocketコンストラクターに渡すにはどうすればよいですか。

0 投票する
4 に答える
1512 参照

c# - C#4 は「動的キャスト」を許可しますか? そうでない場合、C# はそれをサポートする必要がありますか?

下位のインターフェイスまたは基本クラスをより派生したクラスにキャストするという意味での動的キャストを意味するのではなく、作成したインターフェイス定義を取得し、そのインターフェイスに、それから派生していない別のオブジェクトを動的にキャストすることを意味しますインターフェイスですが、すべての呼び出しをサポートしています。

例えば、

これは、既知の型のコンパイル時、および動的に宣言されたインスタンスの実行時に実現できます。インターフェースの定義は型 (この例では) と同様に既知であるため、コンパイラは、オブジェクトがインターフェースによって定義された呼び出しをサポートしているかどうかを判断し、キャストを行うための魔法を実行できます。

私の推測では、これは C#4 ではサポートされていません (参照を見つけることができませんでした) が、確実に知りたいです。そうでない場合は、言語の将来のバリアントに含めるかどうか、およびその理由と反対の理由について話し合いたいと思います。私には、既存のフレームワークの型をラップするためにまったく新しい型を作成する必要なく、コードでより多くのポリモーフィズムを可能にすることは素晴らしい追加のように思えます。

更新
誰かが盗作で私を非難しないように、私はJon Skeetがすでにこれを提案していることに気づいていませんでした. ただし、非常によく似た構文を考えたことを知ってうれしいです。これは、少なくとも直感的である可能性があることを示唆しています。一方、「独創的なアイデアを持つ」ことは、別の日の私のバケット リストに残っています。

0 投票する
6 に答える
2549 参照

c++ - 派生クラスが配列で機能しないのはなぜですか? (C++)

関数 move を使用して、vir という名前のクラスを作成しました。

(変数 int x、int y、および char sym を持つクラスから派生したものです) これから、subvir と呼ばれるクラスを派生させました。

次に、vir の配列を作成し、そこに subvir を入れました。

しかし、sv1.move() を使用しようとすると:

vir_RA[0].move();

subvir move ({x++}) ではなく、vir move ({}) を使用します。sv1 を vir に、vir_RA を vir にしようとしましたが、動作し、両方を subvir にすると動作しますが、異なる必要があります。vir::move() を純粋な仮想にしようとしましたが、配列を実証するエラーが発生します。配列から使用するときに move() を機能させる方法を知っている人はいますか?

0 投票する
10 に答える
81464 参照

java - 子クラスから親のプライベート インスタンス変数にアクセスしますか?

fooプライベート インスタンス変数を持つクラスがあるとしますbar

bazここで、別のクラス、 which を作成しましょうextends foo。にアクセサメソッドが定義されていない場合、非静的メソッドはの変数にbazアクセスできますか?foobarfoo

ちなみに、私はJavaで作業しています。