オブジェクト向けプロパティ(三)

3007 ワード

一、多態1.概説は同一の行為を指し、複数の異なる表現形式を有する.2.前提
 1)      【   】
 2)     【    :   ,   】
 3)          【    】

3.マルチステートのフォーマット親タイプ変数名=newサブクラスオブジェクト;変数名.メソッド名()説明:親タイプ:子オブジェクトが継承する親タイプ、または実装される親インタフェースタイプを指します.マルチステート方式でメソッドを呼び出す場合は、まず親クラスにメソッドがあるかどうかを確認し、ない場合はコンパイルエラーです.ある場合は、サブクラス書き換えメソッド[Java]の純テキスト表示を実行しますか?
public abstract class Animal {
public abstract void eat();  

}
class Cat extends Animal {
public void eat() {  
    System.out.println("  ");  
}  

}
class Dog extends Animal {
public void eat() {  
    System.out.println("   ");  
}  

}
public class Test {
public static void main(String[] args) {
    //     ,    
    Animal a1 = new Cat();  
    //      Cat   eat
    a1.eat();          
    //     ,    
    Animal a2 = new Dog(); 
    //      Dog   eat
    a2.eat();               
}  

}
4.マルチステートのメリットは、プログラムの作成をより簡単にし、拡張性を向上させることができます.5.多態の転換多態の転換は上への転換と下への転換の2種類に分けられる.
 1)    

マルチステート自体は、サブクラスタイプが親クラスタイプにアップコンバートされるプロセスであり、このプロセスはデフォルトであり、親参照がサブクラスオブジェクトを指す場合、アップコンバートされます.フォーマット:親タイプ変数名=newサブクラスタイプ()例えば、Animal a=new Cat();
 2)    

親タイプから子タイプへのダウンコンバートのプロセスです.このプロセスは強制的で、アップコンバートされた子オブジェクトで、親参照を子クラス参照に変換します.強制タイプ変換のフォーマットを使用すると、ダウンコンバートになります.書式:サブクラス型変数名=(サブクラス型)親変数名;例えば、Cat c=(Cat)a;
トランスフォームの原因:マルチステート方式でメソッドを呼び出す場合は、まず親クラスにメソッドがあるかどうかを確認し、ない場合はコンパイルエラーです.すなわち,子クラス所有を呼び出すことができず,親クラスにはないメソッドである.コンパイルが間違っているのに、実行するどころか.これも多態が私たちに与えた「小さなトラブル」だ.したがって,サブクラス特有のメソッドを呼び出すには,下への転換が必要である.例:[Java]純テキスト表示?
abstract class Animal {
abstract void eat();  

}
class Cat extends Animal {
public void eat() {  
    System.out.println("  ");  
}  
public void catchMouse() {  
    System.out.println("   ");  
}  

}
class Dog extends Animal {
public void eat() {  
    System.out.println("   ");  
}  
public void watchHouse() {  
    System.out.println("  ");  
}  

}
[Java]純テキスト表示?
public class Test {
public static void main(String[] args) {
    //       
    Animal a = new Cat();  
    a.eat();                //      Cat   eat

    //       
    Cat c = (Cat)a;       
    c.catchMouse();         //      Cat   catchMouse
}  

}
6.回避タイプ変換異常変数名instanceofデータ型変数がそのデータ型に属する場合はtrueを返します.変数がデータ型に属していない場合はfalseを返します.[Java]純テキスト表示?
public class Test {
public static void main(String[] args) {
    //       
    Animal a = new Cat();  
    a.eat();               //      Cat   eat

    //       
    if (a instanceof Cat){
        Cat c = (Cat)a;       
        c.catchMouse();        //      Cat   catchMouse
    } else if (a instanceof Dog){
        Dog d = (Dog)a;       
        d.watchHouse();       //      Dog   watchHouse
    }
}  

}