Java OOPで何かをしてからしばらく経ちましたので、少し錆びていて、説明が必要でした。
Javaでは、私が正しく覚えていれば、スーパークラスを宣言してサブクラスをインスタンス化することができます。たとえば、Superclass myObject = new Subclass()
。
次に、myObjectをスーパークラスパラメーターを受け入れる関数に渡し、参照を使用してスーパークラスのプロパティ/メソッドにアクセスできます。
ここで問題が発生します-サブクラス固有のメソッド/変数にアクセスする場合は、myObject(スーパークラスとして宣言されています)を使用して直接アクセスできますか、それとも最初にサブクラスタイプにキャストする必要がありますか?
これをC#にロールオーバーすると、同じロジックが適用されますか?この動作を複製しようとすると、いくつかの奇妙な問題が発生します。私が見ている特定のユースケースは次のとおりです。
//These are just declarations for ease-of-reading
Superclass bar = new Subclass();
public static void doSomething(Superclass foo) {...}
//Logic
doSomething(bar);
bar.superOnly() //Should this work?
bar.subOnly() //Should this work?
bar.subOverrided() //Will this call the superclass or subclass version?
私はチュートリアルでもこのようなものを調べていますが、ほとんどの例は、簡単な出力を持つ単純な「Subclass myObject = newSubclass()」インスタンスのようです。私がこれまでに見つけたものは、関数パラメーターのあいまいな世界をカバーしていません。
誰かが私を助けてくれるか、C#の関数パラメーターとOOをカバーする特定のリソースを教えてくれるなら、私はそれを大いに感謝します!