クラスのキャスト
数値型のキャストは以前ご紹介しました(型)。継承関係があるクラスでもキャストが可能です。
1 2 |
Parent parent = new Child(); //Child->Parent Child child = (Child) parent; //Parent->Child |
具体的には、サブクラス(継承先)からスーパークラス(継承元)は可能。スーパークラスからサブクラスは不可能。ただし、サブクラスからスーパークラスにキャストし、それをサブクラスにキャストする場合は可能です。
⇒ | Super | Sub |
---|---|---|
Sub | ○ | – |
Super | – | × |
Sub⇒Super | – | ○ |
スーパークラス、サブクラスに同じ変数、メソッド名が存在している場合は、優先されるルールがあります。サブクラスをスーパークラスにキャストした場合は、変数はスーパークラス、メソッドはサブクラスが優先されます。スーパークラス(サブクラスからキャストしたモノ)からサブクラスにキャストした場合は、サブクラスの変数、メソッドが優先されます。
ー | Super | Sub | ||
変数 | メソッド | 変数 | メソッド | |
Sub⇒Super | ○ | – | ○ | |
Sub⇒Super⇒Sub | ○ | ○ |
なにが便利?
サブクラスが多くある場合はスーパークラスを配列にし、サブクラスをキャストして格納することがあります。配列化することでデータ処理が行いやすくなるのです。