問題タブ [superclass]
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の使用[インターフェイス/抽象クラス]
最近、私はJavaを調べることにしました。それで、Javaとオブジェクト指向プログラミングのアプローチにまだかなり慣れていないので、もっと学ぶ前にいくつかのことをまっすぐに理解したかったのです(良い習慣から始めるのはすぐにはないと思います) )。
私は今のところ小さな2Dゲームをプログラミングしていますが、私の質問は些細なプロジェクトにも当てはまると思います。簡単にするために、ゲームの例を示します。
私はさまざまな種類のゾンビを持っていますが、それらはすべて同じ属性(x、y、ヘルス、攻撃など)を持っているので、WalkingZombie、RunningZombie TeleportingZombieなどで実装するインターフェースZombieを作成しました。これは最善の方法ですか?抽象クラスの方がいいですか?またはスーパークラスで?(私は関数を部分的に実装する予定はありません-そのため、抽象クラスの代わりにインターフェースを選択します)
主人公(サバイバー)を説明するクラスが1つありますが、かなり大きいので、さまざまな機能を備えたインターフェースを作成して、その構造を簡単に確認して共有できるようにしたいと思いました。それは良い習慣ですか?それとも単にスペースと時間の無駄ですか?
インターフェイス/スーパークラス/抽象クラスの使用は論理的なルールに従い、単なる個人的な選択ではないため、経験豊富なプログラマーはこの種のトピックについて異議を唱えないと思ったので、この質問が主観的なものとして評価されないことを願っています。
iphone - Objective-C オブジェクトのスーパークラスのメソッドを別の場所から呼び出すにはどうすればよいですか?
サブクラスを実装している場合、そのメソッドをオーバーライドした場合でも、実装内でスーパークラスのメソッドを明示的に呼び出すことができます。
サブクラスの実装の外側のどこかからスーパークラスのメソッドを呼び出したい場合、つまり:
これは可能ですか?さらに、実装内で複数のレベルに上がることは可能ですか。つまり、次のようになります。
java - この単純な階層のJava問題に対する私の最善のアプローチは何ですか?
まず、質問のタイトルで申し訳ありませんが、私の問題を説明するのにこれ以上のタイトルは考えられません。お気軽に変更してください:)
Box
いくつかのプライベート変数にいくつかのコンストラクター、メソッド、その他を実装するこの抽象クラスがあるとしましょう。次に、とのようなサブクラスがいくつかBoxA
ありBoxB
ます。これらは両方とも余分なものを実装します。
これで、別の抽象クラスと、およびShape
のようないくつかのサブクラスができました。Square
Circle
両方ともBoxA
、オブジェクトBoxB
のリストが必要ですが、オブジェクトのみがのリストに含まれ、オブジェクトのみがのリストに含まShape
れるようにする必要があります。Square
BoxA
Circle
BoxB
そのリスト(各ボックス)には、get()
andset()
メソッドとaメソッドaddShape()
が必要removeShape()
です。
知っておくべきもう1つの重要なことは、作成された各ボックスについて、またはのいずれBoxA
かBoxB
で、それぞれShape
のリストがまったく同じであることです。Square
の名前付きオブジェクトと名前付きのls
2つのオブジェクトのリストを作成するとします。いずれにせよ、との両方が同じリストを持っている必要があります。BoxA
boxA1
boxA2
boxA1
boxA2
ls
これは私の考えです:
リストはそのタイプのオブジェクトで同じである必要があるため、私はそれをとして宣言しstatic
、そのリストで機能するすべてのメソッドもstatic
です。さて、BoxB
クラスはリストのものに関してほとんど同じでしょう。に置き換えるだけSquare
でTriangle
問題は解決しました。BoxA
したがって、作成されたオブジェクトごとに、リストは1つだけで同じになります。作成された各BoxB
オブジェクトについても同じことが起こりますが、もちろん異なるタイプのリストがあります。
それで、あなたが尋ねる私の問題は何ですか?ええと、私はコードが好きではありません...、、、getList()
およびメソッドは基本的setList()
にとに対して繰り返され、リストが保持するオブジェクトのタイプのみが異なります。どういうわけか、これらすべてのメソッドの「重複」を避けたかったのです。addShape()
removeShape()
BoxA
BoxB
Box
代わりにスーパークラスでそれを行う方法を考えることはできません。またはShape
の代わりにを使用して静的に実行しようとしても、リストはすべてのオブジェクトに対して1つだけであり、のサブクラスごとに1つだけである必要があるため、機能しません。Square
Triangle
BoxA
BoxB
Box
どうすればこれを別の方法でより良く行うことができますか?
PS:自分がやっていることに英語で正しい単語がわからないので、実際の例を説明できませんでした。そこで、ボックスと図形の例を使用しましたが、基本的には同じです。
java - 継承問題OOP拡張
父が親であり、親が人であり、人が父を持っている場合、私は以下を作成します。
インスタンス:
これは機能しません...キャストしてみてください::
これも機能しません。
この場合、何が機能しますか?
python - Pythonでスーパークラスのクラスメソッドを呼び出す
私はCouchDBサポートをFlaskに追加するFlask拡張機能に取り組んでいます。簡単にするcouchdb.mapping.Document
ためにstore
、load
メソッドが現在のスレッドローカルデータベースを使用できるようにサブクラス化しました。現在、私のコードは次のようになっています。
簡潔にするためにいくつか省略しましたが、それは重要な部分です。ただし、classmethodの動作方法により、このメソッドを呼び出そうとすると、エラーメッセージが表示されます。
呼び出しをに置き換えてテストしましたが、機能しますが、内部属性にmapping.Document.load.im_func(cls, db or g.couch, id)
アクセスすることに特に満足していません(文書化されている場合でも)。im_
誰かがこれを処理するためのよりエレガントな方法を持っていますか?
objective-c - サブクラス化に関する質問
これはおそらく以前に尋ねられましたが、何を検索すればよいかわかりません。これが私の階層です: NSObject > FirstSubclass > SecondSubclass。しかし、特定の条件が満たされたときに FirstSubclass のいくつかの詳細を変更する必要がある新しい機能をアプリに実装するつもりです。したがって、実際には、FirstSubclass の動作を上書きするには、FirstSubclass と SecondSubclass の間にサブクラスが必要です。SecondSubclass 自体を上書きする必要はありませんが、super
私が持っているすべての異なる SecondSubclass サブクラスに対して何らかの種類のものが必要です。「if then ステートメント」を使用するように FirstSubclass のすべてを変更することもできましたが、最初に別のオプションがないかどうかを確認したかったのです。これには「プロトコル」が必要ですか?のようにSecondSubclass : FirstSubclasslass <WeirdThingIDontKnow>
?
java - .class ファイルが特定のクラスを拡張しているかどうかをプログラムで確認する
かなりの時間解決しようとしてきた問題があります。Eclipse プラグインには、いくつかの Java .class ファイルの完全なパス (文字列として) を含む ArrayList があります。私がやりたいのは、リストに含まれているクラスが特定のクラスを拡張しているかどうかを確認することです。「extends」の後にあるものを探してファイルを解析することを考えましたが、.java ファイルではなく .class ファイルについて話しているのです。他のアイデアはありますか?
ありがとう!
objective-c - クラスのスーパーを変更できますか?
クラスのスーパーを(できれば alloc または init メソッドで)選択して、クラスが他のものから継承することは何とか可能ですか?
oop - いつインターフェースを実装し、いつスーパークラスを拡張するのですか?
私はJavaでのインターフェースとクラスの継承について多くのことを読んでいますが、両方を行う方法を知っており、両方について良い感じがあると思います。しかし、実際に2つを並べて比較し、どちらを使用するのか、いつ使用するのかを説明する人はいないようです。インターフェイスを実装する方が、スーパークラスを拡張するよりも優れたシステムになることはあまりありません。
では、いつインターフェースを実装し、いつスーパークラスを拡張するのでしょうか。
java - スーパークラス内からサブクラスの名前を取得する
という名前の基本クラスがあるとしましょうEntity
。そのクラスには、クラス名を取得するための静的メソッドがあります。
今、私はそれを拡張する別のクラスを持っています。
Userのクラス名を取得したい:
私の目標は、コンソールに「com.packagename.User」の出力を表示することですが、Entityクラスは静的メソッドから直接参照されているため、代わりに「com.packagename.Entity」になります。
これが静的メソッドでない場合は、クラスthis
内のキーワード(つまり、:)を使用することで簡単に解決できます。ただし、このメソッドを静的に保つ必要があります。これにアプローチする方法について何か提案はありますか?Entity
return this.class.getClass()