Java OOPのマルチステート

2398 ワード

オブジェクト向けの3つのプロパティ:継承、カプセル化、マルチステート.
マルチステートとは?オブジェクトの多様な形態として理解できる.(細胞の分化は実は多態である)
Java言語では、次の2つの方法から多態の概念を理解できると思います.(班門弄斧下^^)
一、引用多態
1)親の参照はこのクラスを指すことができる2)親の参照は子オブジェクトを指すことができる
注:子クラスの参照を使用して親オブジェクトを指すことはできません.
        //              
        Animal obj = new Animal();

        //              
        Animal obj1 = new Dog();

        //      ,               
        //Dog obj2 = new Animal();

二、方法多態
1)このクラスのオブジェクトを作成するときに呼び出されるメソッドがこのクラスのメソッド2)サブクラスのオブジェクトを作成するときに呼び出されるメソッドは、サブクラスの書き換えメソッドまたは継承メソッド(非静的)です.
注:親の参照は、子クラス固有のメソッドを呼び出すことはできません.サブクラス固有のメソッドを呼び出す場合は、まずサブクラス参照に変換できるかどうかを判断します.詳しくはこちらを参照
シーンを説明します:Animalクラスを作成し、eat()メソッドを定義し、このメソッドで「動物が食べる能力を持っている」と出力します.AnimalのサブクラスDogクラスを作成し、eat()メソッドを書き換え、「犬は骨をかじっている」と出力し、playDog()メソッドはAnimalのサブクラスCatクラスを作成します.

        //              
        Animal obj = new Animal();

        //              
        Animal obj1 = new Dog();

        //               
        Animal obj2 = new Cat();

        //      ,               
        //Dog obj2 = new Animal();


        //        ,          
        obj.eat();

        //        ,                    
        obj1.eat();

        obj2.eat();

      //                                         ,               
      //obj1.playDog();

出力結果:
        
      
        

メモ:継承はマルチステートを実現する基礎です.
注:オブジェクトのプロパティにはマルチステート性がありません.つまり、親と子の属性が同じ名前の場合、親参照で子オブジェクトを指す場合、親参照でメンバー属性にアクセスし、親の属性値を取得します.
最後に、静的メソッドであれば、参照タイプを直接呼び出すメソッド(理解として)をさらに説明すると、メモとしてもいいでしょう.Javaでは、メソッドは静的と非静的に区別されます.静的領域のメンバー(メソッドと変数)はクラスに静的にバインドされています.つまり、クラス名でしかアクセスできません.静的でない領域では、メソッドを動的に呼び出します.まとめて一言:多態では,静的参照が属するとよい.
demoアドレス:http://download.csdn.net/download/qq_18505715/9847912