問題タブ [static-binding]

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 投票する
2 に答える
45 参照

php - 静的メソッドを使用して、子クラスの静的変数を親クラスで使用する方法

サブクラスで再宣言された静的変数の値を取得したい:

CHILD_ECHO を取得したい。

ありがとう、モッテンマン

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

java - 静的バインディングと動的バインディング

動的バインディングと静的バインディングについて本当に混乱しています。コンパイル時にオブジェクトの型を決定することは静的バインディングと呼ばれ、実行時に決定することは動的バインディングと呼ばれることを読みました。

以下のコードで何が起こるか:

静的バインディングまたは動的バインディング?
これはどのようなポリモーフィズムを示していますか?

0 投票する
1 に答える
123 参照

c# - メソッドから匿名型を受け取り、コンパイル時にそのメンバーを知る

C# の匿名型について多くの質問があることは承知していますが、どれも答えてくれません。また、メソッドの結果をオブジェクトに代入するか、Jon Skeet によるこの記事dynamicのようにキャストすることで、匿名型を返すことができることも知っていますが、どちらの場合も、匿名オブジェクトのメンバーを知る必要があるため、なぜ次のようなことを可能にするキーワードのような名前を付けることはできませんか。anonymous

そして、次のように使用します。

しかし、静的型付けはありますか? つまり、匿名オブジェクト メソッドの戻り値のメンバーをコンパイラが静的に認識できないのはなぜFでしょうか。

0 投票する
1 に答える
74 参照

java - オブジェクトの代わりにオブジェクト型のメソッドがJavaで、特に静的バインディングで呼び出されるのはいつですか?

私の質問はあまり明確ではないかもしれません。この例を見ると、さらに説明できます。このStatic vs Dynamic Binding Logicに投稿された回答を読んでいると、この質問がありました。

2 つのバージョンのコードがありますが、どちらもまったく同じですが、パラメーターの型が変更されています。Class B p (double i)

私の質問は次のとおりです。p(int)クラス A からが最初のバージョンで呼び出され、p(double)クラス B からが 2 番目のバージョンで呼び出されるのはなぜですか。

を宣言するB c;と、型の参照変数を初期化しますB

次に、c を新しいオブジェクトに代入します。c = new A();

したがって、この宣言B c = new A();はクラス A のインスタンスを作成し、型 B の変数に代入します。メソッド呼び出しが c で実行されるときはいつでも、コンパイラは最初にメソッドが B に存在するかどうかをチェックします (それは B 型であるため)。呼び出されるメソッドは、オブジェクト (A インスタンス) のものです。上記の例でこの動作が見られないのはなぜですか? または、私の推論が間違っている場合は、親切に訂正してください。

ありがとう

0 投票する
2 に答える
632 参照

java - Java の静的および動的バインディング、アップキャスト、オーバーロードの混合

次のコードがあるとしましょう

基本的に、TestEqual クラス (もちろん Object を拡張します) には、Object から equals メソッドをオーバーロードするメソッドがあります。

また、いくつかの変数があります。TestEqual としてインスタンス化されたオブジェクト t1、t2、TestEqual としてインスタンス化された TestEqual t3、およびオブジェクトとしてインスタンス化されたオブジェクト o1 です。

プログラムを実行すると、これが出力になります。

この例は、通常の Car c = new Vehicle(); よりも少し複雑に見えます。c.drive(); メソッドを呼び出すオブジェクトはその型とは異なるインスタンスであり、メソッドのパラメーターもその型とは異なるインスタンスであるためです。

バインディングに関して、各メソッドを段階的に呼び出したときに何が起こるかを正しく理解しているかどうかを確認したいと思います。

t1 は TestEqual オブジェクトと見なされます。メソッド equals はオーバーロードされているため、バインディングは静的です。これは、t2 をオブジェクトとして渡すことを意味し、オブジェクト スーパークラスから継承された equals メソッドを呼び出すため、テキストは表示されません。

これは少し奇妙に思えます。t3 は TestEqual オブジェクトであるため、「In equals from TestEqual」と表示されることを期待していたので、t1 の equals を呼び出す必要があります。ここでの私の説明は、t1 は静的にバインドされ、オブジェクトと見なされるため、Object クラスから継承されたメソッド equals が呼び出され、パラメーター TestEqual t3 が Object にアップキャストされるということです。しかし、これは t1.equals(t2) からの前の説明が間違っているということではないでしょうか?

t3 は TestEqual オブジェクトで、パラメーター o1 は Object であるため、Object から継承された equals メソッドが呼び出され、何も出力されません。

t3 は TestEqual オブジェクトで、パラメーターは TestEqual オブジェクトであるため、TestEqual からオーバーロードされたメソッドが呼び出され、「In equals from TestEqual」が出力されます。

t3 は TestEqual オブジェクトであり、パラメーターは静的バインディング (メソッドのオーバーロード) により Object であるため、Object から継承された equal メソッドが呼び出され、何も出力されません。