- サブクラス変数をそのスーパークラスにキャストできますか?
- スーパークラス変数にサブクラス変数を割り当てることはできますか?
- スーパークラスに変数を割り当てることはできますか?
- もしそうなら、インターフェイス変数は実装クラスからの変数を割り当てることができますか?
5 に答える
すべての犬も動物ですか?
すべての動物も犬ですか?
あなたが動物を必要としていて、私があなたに犬をあげる場合、それはいつでも受け入れられますか?
特に犬が必要な場合、私はあなたにどんな動物でも与えますが、それは問題になる可能性がありますか?
運転できるものが必要だが、.Accelerate や.Steer のような方法があれば、それが何であるかは問題ではありません。それがポルシェであろうと救急車であろうと、気にしますか?
- はい
- サブクラスインスタンスをスーパークラス変数に割り当てることができます
- は?
- クラスのインスタンスを、クラスが実装する任意のインターフェイス タイプの変数に割り当てることができます。
わかりやすくするために、次のことを考慮してください。
class A extends B implements C { }
はサブクラスA
、B
はスーパークラス、は実装C
するインターフェースです。A
サブクラスは、任意のスーパークラスに上向きにキャストできます。
B b = new A();
スーパークラスは、どのサブクラスにも下向きにキャストできません (サブクラスにはスーパークラスにはない機能がある可能性があるため、これは不合理です)。次のことはできません。
A a = new B(); // invalid!
スーパークラスは、適切な型の任意の変数に割り当てることができます。
A q = new A(); // sure, any variable q or otherwise...
クラスは、実装されたインターフェイスの 1 つの型の変数に割り当てることができます。
C c = new A();
サブクラス変数をそのスーパークラスにキャストできますか?
はい
また、スーパークラス変数にサブクラス変数を割り当てることはできますか?
はい
スーパークラスに変数を割り当てることはできますか?
はい
もしそうなら、インターフェイス変数は実装クラスからの変数を割り当てることができますか?
はい
はい、それは通常、ポリモーフィズムの主なアイデアです。
いくつかの形状があるとしましょう: 円、正方形、三角形。あなたが持っているでしょう:
class Shape { ... }
class Circle extends Shape { ... }
class Square extends Shape { ... }
class Triangle extends Shape { ... }
継承の考え方は、Circle は Shape であるということです。したがって、次のことができます。
Shape x = ...;
Point p = x.getCenterPosition();
x
変数がどの具体的な型であるかを気にする必要はありません。