ポリモーフィック、変態アップ、ダウンキャスト

1  パッケージcn.learn.Polymorphism;
 2  
。3  パブリック クラスフー{
 4。     公共 ボイドメソッド(){
 5。          のSystem.out.println( "親クラスは、サブクラスのメソッドは、親クラスの動作方法を有している" 。6  
。7      }
 8      公共 ボイドmethodFu(){
 9。          のSystem.out.println( "親固有のサブクラスで実行する方法はありません"を);
 10      }
 11  
12は、     INT = 10 NUM;     // 同じ名前のサブクラスのメンバ変数ケース
13 }
1  パッケージcn.learn.Polymorphism;
 2  
。3  パブリック クラス延びフー{
 4。     公共 ボイドメソッドを(){
 5。 
6。          のSystem.out.println( "親クラスは、サブクラスのメソッド、サブクラスの動作方法を有している" );
 7      }
 8      公共 ボイドmethodZi(){
 9          のSystem.out.println(「独自の方法をサブクラス」);
 10      }
 11個の     // メンバ変数を上書きすることはできない
12は     INT NUM = 20;     // 同じ名前及びサブクラスのメンバ変数ケース
13 }
1  パッケージcn.learn.Polymorphism;
 2  / * 
3     多型は、多型のオブジェクトである
 4     コードは多形具現:親クラスのサブクラスオブジェクトへの参照
 5      -
 6。     上向きの遷移オブジェクト、例えば:動物動物=新しい猫( ) ;
 7      methodZiは(以下のように、大規模に小さい安全な、しかし欠点があるサブクラス特異的サブクラスのメソッドの範囲を呼び出すことはできません)
 8     オブジェクト名=新しいサブクラス名の親クラス名();
 9     インターフェイス名実装クラス名=新しい実現タイトル();
 10  
11     -
 12は、    オブジェクトの変換ダウン(縮小)サブクラス名=オブジェクト(サブクラス名)親クラス・オブジェクトの名前
 13     注:同じサブクラスオブジェクト新しいなく、親クラスの他のダウンキャストにオブジェクト
 14     EG:
 15     フー紫OBJ =新しい新しい();
 16     紫OBJ =(ZI)OBJ2エラーは、コンパイラはエラーメッセージではなく、エラーがスローさにjava.lang.ClassCastExceptionを
 図17    ZI OBJ =(ZI)OBJ正しい
 18     目的:独自の方法ZIクラス使用
 19の 
20     利点:関係なく誰新しい右側、左側が同じコール残っていない
 21  
22   * / 
23  パブリック クラス多型{
 24-      公共 静的 ボイドメイン(文字列[ ]引数){
 25          フーOBJ = 新しい新しい紫();   // 上方遷移
26れる          (obj.methodする);     // 親子は誰であるか、新しい新しい実行するサブクラス、実行、存在する
27          obj.methodFuを();   // このメソッドのないサブクラスが親を見つけることが
 28  
29          // 直接、我々がダウンし、リストアする必要が医療過誤の変換を呼び出すことはできませんメンバメソッドobj.methodZi()
 30を         //フォーマットに基づく:instanceofのオブジェクト・クラス名の名前、戻り値はブール値である
31である          (OBJのSystem.out.println のinstanceof ZI);
 32  
33である         // メンバー法における多型、コンパイルされた左走行で新規新しいオブジェクト右
 34          // メンバ変数、マルチステート、一見オブジェクトクラスのメンバ変数は、左
 35を         // あなたが下方に削減objを誰がわからない場合(OBJのinstanceofクラス名)場合、再変換することによって決定することができる
36          ((紫) OBJ).methodZi(); // 正しい、意気消沈還元
37  
38  
39          / * 
40          二つの方法でアクセスメンバ変数:
 41の         1.直接アクセス:メンバ変数の等号の左側であり、次いで、ルックアップしません
 42の         2.間接アクセス:誰に、それは誰とで所属する方法、のメンバーによるアクセス。いいえ同上
 43ではありません          * / 
44で          のSystem.out.println(obj.num);    //NUM 10は、エラーがそのメンバーの方法とは異なる行われていない、親クラスと呼ばれているアップキャスト
45          のSystem.out.println(((ZI)OBJ).num);    // 呼び出しが下方サブクラスNUM 20遷移
46は、 
47      }
 48 }

 

おすすめ

転載: www.cnblogs.com/huxiaobai/p/11470286.html