問題タブ [method-hiding]
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.
c++ - C++ 名前空間名の非表示
次のコードがあるとします。
::なしでabc名前空間内でstd::sqrtを呼び出す方法はありますか? 私のプロジェクトでは、もともと名前空間を使用していなかったため、オーバーロードされたすべての関数が表示されていました。名前空間 abc を導入すると、オーバーロードによって隠されているすべての関数を手動でチェックし、:: を追加する必要があることを意味します
この問題を処理する正しい方法は何ですか?
c# - 継承されたメソッドは、派生クラスの新しい実装にアクセスできません
このMSDNの記事で参照されているように:
派生クラスの型オブジェクトは、基本クラスから継承された新しい再定義されたメソッドにアクセスできず、継承されたShowDetails()
メソッド内のメソッドからの派生クラスのオブジェクトの呼び出しは、基本クラスDescribeCar()
のメソッドに対して行われShowDetails()
ます。
DescribeCar()
メソッドもクラスで使用できる場合、ConvertibleCar
いわゆるnew ShowDetails()
メソッドが表示されないのはなぜですか?
c# - 基本クラスから派生したクラスのオブジェクトで呼び出されたときの「this」キーワード タイプ
私がこのようなものを持っている場合:
次のコードを使用して呼び出します。
次に、Name
基本クラスのメソッドが呼び出されます。しかし、メソッドthis
内のキーワードの実際のタイプは何でしょうか? Write
それがDerived
タイプである場合(プログラムコントロールがメソッドの最初のifブロックに入るためWrite
)、それは基本Name
メソッドを呼び出しています.なぜ明示的なキャストは派生クラス(Derived)this
のメソッドへの呼び出しを変更するのですか?Name
c++ - ベース関数の非表示に関する警告
基本クラスの非仮想メソッド、または派生クラスの仮想メソッドまたは非仮想メソッドによってオーバーライド/非表示になっている C++ コード ベースがあります。ほとんどの場合、これはコードのエラーです。
コンパイラの警告やツールなどのケースを自動的にチェックするためにできることはありますか?
これは、派生クラスがベースから非仮想関数を非表示にするのを防ぐ、または同様のプロトタイプを使用して非仮想メソッドを非表示にするための警告がない (G++ 4.4) に似ていますが、既存のコードベースでこれらの問題を検出する実際の解決策を探しています。たぶん、隠し機能の警告だけで十分です(リストは1つずつ通過するのに十分小さいと思います)
コードベースを手動で変更して「オーバーライド」または「最終」などを追加することはできません。このチェックは 1 回だけ実行する必要があるためです。すべての非仮想関数を「最終的に」定義して、それらが非表示になるのを防ぐようなグローバルなソリューションは問題ありません。
Visual Studio 2012 を使用していますが、ubuntu と gcc にもアクセスできます。
java - Java - オーバーライドと修飾子 final の非表示
私のような質問が見つからなかったので、重複していないことを願っています。
繰り返しますが、オーバーライドと非表示についてです。と思いますが、間違っているかもしれませんが、どちらも理解できました。
次のコードは期待どおりに動作します。両方のメソッドが非表示になっています。method1 はプライベート メソッドであり、プライベート メソッドは非表示にしかオーバーライドできないため、method2 は静的であり、静的メソッドはオーバーライドできないため、非表示にしかできないためです。
仕様を読むと、次のように書かれています。
http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.3.3
サブクラスがメソッドをオーバーライドまたは非表示にしないように、メソッドを final として宣言できます。
Parent クラスの method1 を「final」に変更すると
すべて正常に動作します。edit start: final メソッドを非表示にできないというコンパイラ エラーが発生することを予期していましたが、そうはなりませんでした。:編集終了
質問 1: 静的メソッドのみを非表示にできるということですか? 私が読んでいる本 (OCA 学習ガイド、Jeanne Boyarsky と Scott Selikoff の 252 ページ) では、私的な方法が隠されていると明確に述べています。
次に、Parent クラスの method2 を次のように変更しました。
現在、コンパイラは文句を言いますが、「子は method2() をオーバーライドできません」というエラーが表示されます。これは、メソッドを隠そうとしたと思ったため、かなり混乱しています。
質問 2: 「子は method2() を非表示にできない」ではないでしょうか?
編集開始:ここではオーバーライドが行われないことをよく知っていますが、前述の仕様が指摘しているように:修飾子 final はメソッドがオーバーライドまたは非表示になるのを防ぎます。そのため、タイトルに入れました。:編集終了
c# - スーパークラスのものと同じ署名を持つメソッドを作成するときに new キーワードを使用しますか?
すぐに CS101 に戻ります。Add
クラスのメソッドの動作を拡張しようとしていConcurrentDictionary
ます。存在しないvirtual
かabstract
、キーワードでマークする必要がないためoverride
、サブクラスに同じシグネチャを持つ新しい関数を簡単に作成できます。
これを行うと、次のようなビジュアルスタジオメッセージに気付きますが
非表示が意図されている場合は、new キーワードを使用します。
このキーワードを使用すると、サブクラスのインスタンスから呼び出されたときのメソッドの実行方法が変わりますか?
たとえば、以下のコードでは、クラスのインスタンスがあり、MyClassEx
呼び出したMethod1
場合Method1
、スーパークラスでは正しく呼び出されません (自分で呼び出した場合のみbase
)?. この同じインスタンスを呼び出すとMethod2
、同じ結果が発生し、サブクラスのみMethod2
が実行されますか?
この方法でキーワードを使用しているのは、new
単に「適切なコーディング」ですか、それとも何らかの効果がありますか?
編集:このように見えるのは、単なる「適切なコーディング」です。それはわずかな懸念を引き起こしますが。Add
サブクラスに新しいメソッドを作成して、メソッドの動作を変更したいと考えていますConcurrentDictionary
。リンクされた回答からは、スーパークラスのサブクラスを参照するだけで、別のコーダーが私の新しい実装を回避できるようです。
この場合、Method2
私が実装した動作を無視して、スーパークラス (デフォルトの動作) を呼び出すことができますか?
java - スーパークラス変数によるサブクラス参照?
クラスがクラスを拡張する場合、サブクラス オブジェクトにメモリを割り当てながら、スーパークラス参照を使用できます。これまでのところ、サブクラスはその親クラスのデータを継承するため、そうしても問題ないことを理解していますが、サブクラスのメンバーには参照であるためアクセスできず、追加内容がわからないためです子クラスによって行われます。
私の質問は、上記の概念にメソッド隠蔽を含めたとき、スーパークラス参照変数が子のクラス関数を参照し始めたことです。何故ですか ?本来の方法で独自のメソッドを呼び出さなかったのはなぜですか?