トラが動物であることはわかっていますが、動物クラスがトラ クラスの親クラスである場合、トラが動物である場合、トラはその固有の属性と機能を失うことに注意する必要があります。人間の思考の観点から見ると、「トラは動物である」ということは上向きの思考法に属し、Java 言語の上向き変換オブジェクトに似ています。
サブクラスを使用してオブジェクトを作成し、このオブジェクトの参照を親クラスのオブジェクトに配置する場合、Animal クラスが Tiger クラスの親クラスであると仮定します。次に例を示します。
動物;a=newTiger();
または
動物;Tigerb=newTiger();a=b;
このとき、オブジェクトaをオブジェクトbの上方変換オブジェクトと呼ぶのは、「トラは動物だ」と言っているようなものです。 サブクラスはアップトランスフォームされたオブジェクトのエンティティを作成する役割を果たしますが、アップトランスフォームされたオブジェクトは元のオブジェクトの一部の属性と機能を失います。
上向き変換オブジェクトには次の特性があります。
(1) アップトランスフォームされたオブジェクトは、サブクラスの新たに追加されたメンバ変数を操作できず、サブクラスの新しいメソッドを呼び出すこともできません。
(2) アップトランスフォームされたオブジェクトは、サブクラスによって継承または隠蔽されたメンバー変数にアクセスでき、また、サブクラスによって継承されたメソッドまたはサブクラスによってオーバーライドされたインスタンス メソッドを呼び出すこともできます。アップキャスト オブジェクトは、サブクラスによって継承されたメソッド、またはサブクラスによってオーバーライドされたインスタンス メソッドを操作し、その機能はサブクラス オブジェクトでこれらのメソッドを呼び出すことと同等です。したがって、サブクラスが親クラスのインスタンス メソッドをオーバーライドする場合、オブジェクトのアップキャスト オブジェクトがこのインスタンス メソッドを呼び出すときに、サブクラスによってオーバーライドされたインスタンス メソッドを呼び出す必要があります。
知らせ:
(1) 親クラスが作成したオブジェクトと、サブクラスのオブジェクトのアップタイプのオブジェクトを混同しないでください。
(2) オブジェクトのアップキャストオブジェクトを強制的にサブクラスオブジェクトに変換することができます。このとき、サブクラスオブジェクトはサブクラスのすべての属性と機能を持ちます。
(3) 親クラスで作成されたオブジェクトへの参照を、サブクラスで宣言されたオブジェクトに割り当てることはできません。たとえば、「その人は中国人です」ということはできません。