問題タブ [abstract-methods]
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.
delphi - Abstractメソッドのデフォルトの実装
私は、多くのクラスとこれらのクラスの多くの抽象メソッドを持つ大規模なコードベースを扱っています。次のような状況でどうしたらいいかという人の意見に興味があります。
抽象メソッドを持つクラスParent-Aがある場合。子供は2人だけです。Child-BがAbstractMethodAを実装しているが、Child-Bは適用されないため実装していない場合。
するべきか
- 親からabstractキーワードを削除し、仮想または動的を使用しますか?
- メソッドの空の実装を提供します。
- 呼び出された場合にエラーを発生させる実装を提供します。
- 警告を無視します。
編集:すべての答えをありがとう。これは起こらないはずだという私の疑いを確認しました。さらに調査したところ、メソッドがまったく使用されていなかったことが判明したため、完全に削除しました。
java - Java では、どのような場合にインターフェースで抽象メソッドを使用する必要がありますか?
私はJavaで次のインターフェースを持っています
foo() と bar() の違いは何ですか? いつアブストラクトを使用する必要がありますか?
微妙な何かが欠けていない限り、どちらも私が望むことを達成しているようです?
なぜJavaインターフェースメソッドを抽象として宣言するのかの複製を更新しますか?
c# - 派生クラスでの抽象メソッドのオーバーライド、プライベートにする方法
こんにちは、抽象メソッドとしてクラス「A」を持っています
次の条件で、派生クラス「B」でこのメソッドをオーバーライドしたい
- Bクラス専用にしてください。
コンパイラは、派生クラス "B" でこのメソッドをプライベートとして宣言することを許可していません。正しい構文は何ですか?
c# - C++/CLI : C++/CLI で (C# で) 抽象クラスとメソッドを宣言するにはどうすればよいですか?
C++/CLI の次の C# コードに相当するものは何ですか?
java - 抽象クラスには少なくとも 1 つの抽象メソッドが必要ですか?
抽象クラスに少なくとも 1 つの抽象メソッドが必要ですか?
oop - 「抽象静的」メソッド - どのように?
抽象静的メソッド/フィールド自体がない理由について、すでにいくつかのSOの質問がありますが、次の擬似コードを実装する方法について疑問に思っています:
Animal
ここに問題があります:継承するすべてのクラスにメソッドが含まれていることを確認したいと仮定しますgetNumberOfLegs()
(つまり、抽象クラスにすべての子クラスに共通のいくつかのメソッドを実装させたいことを除いて、ほとんどインターフェースのようです。したがって、純粋なインターフェースはそうではありませんここで働く)。getNumberOfLegs()
明らかに静的メソッドである必要があります (完全な世界では鶏や犬を不自由にしていないと仮定すると、getNumberOfLegs
インスタンスに依存しません)。
「抽象静的」メソッド/フィールドがないと、メソッドをクラスから除外することができ、Animal
一部の子クラスにそのメソッドがないというリスクがあります。またはgetNumberOfLegs
、インスタンス メソッドを作成することもできますが、その場合、動物の脚の数を調べるためにクラスをインスタンス化する必要があります (必須ではありませんが)。
通常、この状況をどのように実装しますか?
編集:ここで、これをどのように使用するかを示します。各動物の足の数が一意であると仮定すると (これはばかげていますが、とにかく...)、次のようになります。
abstract-class - いつ、なぜ抽象クラス/メソッドを使用するのですか?
抽象クラス/メソッドについていくつかの基本的な質問があります。抽象クラスの基本的な使用法は、将来のクラスのテンプレートを作成することであることを私は知っています。しかし、それらの用途は他にありますか?いつインターフェースよりもそれらを好むべきで、いつそうでないのですか?また、抽象メソッドはいつ役に立ちますか?
c# - ポリモーフィズムとキャスティングの問題
ここで私の問題を説明するために例があります
私の問題は、Main()でreturnMyObject()メソッドが返すタイプがわからないため、MyMethodに送信できないことです。オブジェクトをキャストする方法はありますか?
java - デフォルトの実装または抽象メソッド?
メソッドのデフォルトの実装をスーパークラスに配置し、サブクラスがこれから逸脱したい場合にそれをオーバーライドする方がよいでしょうか?それとも、スーパークラスのメソッドを抽象化したままにして、多くのサブクラスで通常の実装を繰り返すべきでしょうか?
たとえば、私が関与しているプロジェクトには、停止する条件を指定するために使用されるクラスがあります。抽象クラスは次のとおりです。
些細な実装は次のようになります。
オブジェクトでこれを行う理由は、これらのオブジェクトを任意に一緒に構成できるからです。例えば:
ただし、イベントが発生したことを通知する必要がある停止条件がいくつかあります。例えば:
eventHasOccurred(Event e)
抽象スーパークラスでどのように表現するのが最適でしょうか? ほとんどのサブクラスは、このメソッドの no-op 実装を持つことができます (例: AlwaysHaltingCondition
)。一部のサブクラスは、正しく動作するために重要な実装を必要とし (例HaltAfterAnyEventHaltingCondition
:それらは正しく動作します (例: ConjunctionHaltingCondition
)。
コードの重複を減らすデフォルトの実装を持つことができますが、一部のサブクラスがコンパイルされても、オーバーライドされていない場合は正しく動作しません。または、メソッドを抽象として宣言することもできます。彼らが提供していた実装について考えてみてください。これらの戦略のその他の長所と短所は何ですか? 一方は他方よりもはるかに優れていますか?
c# - C# 設計: 抽象メソッドでは new/override が必要なのに、仮想メソッドでは必要ないのはなぜですか?
抽象メソッドでは new/override が必要であるのに、仮想メソッドでは必要でないのはなぜですか?
サンプル 1:
コンパイラは次のエラーを表示します: 現在のメンバーでその実装をオーバーライドするには、override キーワードを追加します。それ以外の場合は、新しいキーワードを追加します
サンプル 2:
デフォルトでメソッドを非表示にすることで、これは正常にコンパイルされます。
技術的な違いを完全に理解しています。しかし、なぜ言語がそのように設計されたのか疑問に思います。「サンプル2」も同様の制限を設けたほうがよいのではないでしょうか?つまり、ほとんどの場合、親クラスと同じ名前のメソッドを作成すると、通常はそれをオーバーライドしようとします。したがって、Override/New を明示的に指定することは、仮想メソッドでも意味があると思います。
この動作に設計上の理由はありますか?
更新: 2 番目のサンプルでは実際に警告が発生します。最初のサンプルは、抽象メソッドを実装するためにサブクラスが必要であるため、エラーを示しています。VSで警告が表示されませんでした..今では完全に理にかなっています。ありがとう。