問題タブ [abstract-class]
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.
java - Java抽象クラスの混乱:オーバーライドされたメソッドが呼び出されない
だから私は2つのクラスがあります。1つは抽象的です:
1つは具体的なサブクラスです。
サブクラスでは、抽象クラスのrun()メソッドを呼び出します。これは、すべてのクライアントに共通である必要があるためです。run()メソッド内には、抽象メソッドdisplayOptions()の呼び出しがあります。
サブクラスのdisplayOptions()をオーバーライドしたので、サブクラス化されたメソッドを呼び出すと想定しましたが、そうではないようです。これを行う方法はありますか、それとも明らかな間違いを犯したか、抽象クラスがどのように機能するかを誤解しましたか?
PSサブクラス化されたdisplayOptions()内にprintステートメントを入れて、呼び出したメソッドで何かしらなことをしていないことを確認しました。
どうもありがとう、
アダム
c++ - C++ での抽象クラスの使用
拡張オブジェクトをパラメーターとして関数に渡すときに抽象クラスを使用しようとしていますが、これまでの試行でいくつかのコンパイラ エラーが発生しました。
問題が何であるかについていくつかの手がかりがあります.抽象クラスをインスタンス化することは明らかに許可されていません.MyClassのコードの一部はこれを実行しようとしていると思いますが、これは私の意図ではありません. いくつかの調査では、目的を達成するためにオブジェクトをポインターとして参照する必要があることが示唆されていますが、これまでの試みは失敗しており、これが答えであるかどうかさえわかりません (したがって、ここで質問しています)。
私は C++ よりも Java に精通しているので、提出します。私の問題の一部はこれによるものだと確信しています。
これが私のプログラムでやろうとしていることの例です:
この例では、プログラムで発生したのと同じコンパイラ エラーが発生します。
アップデート
フィードバックありがとうございます。
「MyClass::instance」を A 型のポインターを含むように変更しましたが、vtable に関連するいくつかの奇妙なエラーが発生するようになりました。
私の変更されたコードは次のとおりです (A と B は変更されていません)。
.net - 拡張メソッドの出現により、抽象クラスは魅力的ではなくなりましたか?
.NET の拡張メソッドの興味深い点の 1 つは、それらをインターフェイスに適用できることです。私にとっては、アセンブリを乱雑にする抽象クラスを定義することなく、インターフェイスの近くで機能を定義できることは素晴らしいことです。
抽象クラスが時代遅れなどではないことは知っていますが、コードでこの副作用を利用することについてどう思いますか?
例:
c# - インターフェイスを実装し、抽象クラスから継承するクラスを作成するにはどうすればよいですか? (C#.NET 3.5)
インターフェイスと抽象クラスによって提供される機能が必要だと思う状況があります。
シミュレーションで使用するモデルを作成しています。各モデルは、(変更できるように私の設計の) IModel インターフェイスを実装する C# クラスに含まれています。また、C# モデル クラスとシミュレーション環境の間のブリッジとして機能する c++ アンマネージ Win32 DLL も作成しました。モデル クラスは COM 経由で呼び出されるため、インターフェイスが必要です。
これらのモデル クラスは、シミュレーション環境とは関係なく、Web サービスを介して呼び出すことができる必要があるという新しい要件を受け取りました。現在、これらのモデルはかなり機密性が高く、クライアントは、クライアントによって構成され、サーバー上で実行されるように要求しています*。モデル クラスを抽象クラスから継承させ、サーバー上に Web サービス メソッドを作成すれば、これが可能になると考えました。
クライアントからモデル オブジェクトを受け取り、それを実行し、結果を入力します。
しかし、モデルには COM 実装用のインターフェイスが必要なため、抽象クラスは使用できません。
これらの 2 つの要件をどのように調整できますか? クラスにインターフェースを実装させ、そのクラスを抽象クラスから派生させることは可能だと言われましたが、その例は見つかりません。可能であれば、構文は何ですか? それができない場合、他に何をすればよいですか?
* モデル クラスは実際には古代の fortran 実行可能ファイルを呼び出すため、クラスのモデル構成は、モデルの動作に関する情報をあまり提供しません。
c++ - この間接的な関数呼び出しの利点は何ですか?
ライブラリで次のコードを見つけました。
今、私は疑問に思っています: なぜこの間接化を使用するのでしょうか? 上記が単純な代替手段よりも優れている理由は何かありますか?
c# - サブクラスによるベースクラスからの抽象メソッドの戻り値の型の指定
私は次の構造を持っています:
具体的なサブクラスが何であれ、クラスを返す抽象メソッドを作成したいと考えています。したがって、例からわかるように、 のメソッドSubOne
は返す必要がList<SubOne>
ありますが、 のメソッドはSubTwo
を返す必要がありList<SubTwo>
ます。
Base クラスで宣言された署名で指定する型は何ですか?
[アップデート]
投稿された回答に感謝します。
解決策は、次のように抽象クラスをジェネリックにすることです。
oop - インターフェイスと抽象クラスの違いは何ですか?
複製:
おそらく最も有名なソフトウェア開発者の就職の面接の質問の1つです。
あなたの答えは何ですか?
編集:私はあなたが実際の状況でこれにどのように答えるかを見つけようとしています。実際の就職の面接と同じように答えを定式化してみてください(完全に記入してください。ただし、長すぎないでください。もちろんリンクは投稿しないでください)。
c# - ここで抽象クラスまたはインターフェースが必要ですか (またはどちらも必要ありません)?
倉庫を持っています。ボックスの場所を名前、説明、UPC などで検索したい場合があります。これらの各検索メソッドは、同じさまざまなプライベート メソッドを呼び出して、データの検索に役立つ情報を見つけます。
たとえば、upc はプライベート メソッドを呼び出して行 ID を検索します。name も X もそうです。したがって、それらすべてに対してそのメソッドが必要です。その行 ID を使用して、シェルフの場所を見つけることができます (これは単なる例です)。
しかし、私の質問は、さまざまな方法でボックスを検索しているため、抽象クラス (または他の何か) を使用する必要があるかどうかです。
言い換えれば、ルックアップ用の私のコードは、UPC とロケーション用に非常に似ているとします。各メソッドは何かを呼び出すことができます (select * from xxxx where location =、または select * from xxxx where upc =)。同じクラスに 2 つの異なるメソッドを作成することもできます
... 繰り返しますが、これは 1 つの大きなクラスになります。
保持できるスーパークラスが必要な理由はありますか
それを継承して、必要なバージョンの LocateBox メソッドをオーバーライドする 2 番目のクラスを作成しますか?
OODに見える以外に、なぜこれをやりたいのかわかりません。これは、正当な理由があれば、これをやりたいということを意味します。しかし、私は利点がないことを知っています。クラスがどんどん大きくなっていくのがわかっただけで、メソッドの名前と少しのコードを少し変更しただけで、継承の方が良いのではないかと思いました。
それが重要な場合はC#を使用してください。
編集 - ソースがなく、クラス定義が含まれている .dll だけを誰かに渡した場合、これを行いますか? クラス定義。私のプロパティなどと、どのメソッドをオーバーライドするかを教えてくれます。
c# - C# の抽象クラスでインターフェイスを使用する
私は C++ から C# を学んでいて、壁にぶつかりました。
抽象クラス AbstractWidget、インターフェイス IDoesCoolThings、および RealWidget と呼ばれる AbstractWidget から派生したクラスがあります。
RealWidget オブジェクトをインスタンス化し、それに対して DoCool() を呼び出すと、コンパイラから次のエラーが表示されます。
「RealWidget」には「DoCool」の定義が含まれていません
RealWidget オブジェクトを IDoesCoolThings にキャストすると、呼び出しが機能しますが、それは不要なようで、ポリモーフィズムも失われます (RealWidget.DoCool() を定義しても、AbstractWidget.DoCool() は常に呼び出されます)。
解決策は簡単だと思いますが、さまざまなことを試しましたが、一生これを理解することはできません.
c# - C# 未知の抽象クラスをデシリアライズする
私はシリアライゼーションの基本にしか精通していませんが、今ではそれを使用しています。ReportBase 抽象クラスと、基本クラスから派生した複数のレポートを備えた既存のレポート システムがあります。これらにはそれぞれ、コンストラクターで指定された異なるレポート パラメーターと、場合によっては追加のメソッドがあります。派生クラスのいずれかをシリアル化し、後で派生クラスの型を知らなくても逆シリアル化することは可能ですか?
あるいは、それを達成するためにリフレクションで何かをすることもできます。おそらくシリアル化されたオブジェクトをデータベースに保存するので、レポートクラスを別のフィールドに追加できると思います。