多型は、主に二つの側面では、オブジェクト指向、マルチステートオブジェクトで非常に重要な概念です。
- オーバーロードされたメソッドのオーバーライド
- 多型のオブジェクト
多型のオブジェクトは、二つのタイプに分けられます。
- アップキャスト:サブクラスのオブジェクト - 親クラスのオブジェクト
- ダウンキャスト:親オブジェクト - サブクラスのオブジェクト
自動的に上向きに推移、プログラムオブジェクト。意気消沈サブクラスは、明示的にトランジションのタイプを指定する必要があります。形式は次のとおりです
:アップキャストオブジェクト父类 父类对象 = 子类实例;
オブジェクトダウンキャスト:子类 子类对象 = (子类)父类实例;
ケースオブジェクトアップキャスト:
親クラスの定義:
public class Father {
public void fun1(){
System.out.println("father`s method fun1");
}
public void fun2(){
System.out.println("father's method fun2");
}
}
定義されたサブクラス
public class Son extends Father {
@Override
public void fun1() {
System.out.println("son's method fun1 ");
}
public void fun3(){
System.out.println("son's method fun3");
}
}
試験上方遷移
@Test
public void test() {
Son son = new Son();
Father father = son;
father.fun1();
}
テスト結果:
FUN1息子の方法で
分析:
父のFUN1のメソッド呼び出しが、実際には、サブクラスのためのFUN1を呼び出します。すなわち、遷移が発生した後、方法は、サブクラスによってオーバーライドされなければならないオブジェクトアップを呼び出すとき、です。しかし、父は、クラスの呼び出し息子fun3法で定義されていません。あなたがチューニングfun3方法にしたい場合は、サブクラスのインスタンスを呼び出す必要があります。
オブジェクトダウンキャスト:
以上のテストケースを使用します。
@Test
public void test2() {
Father father = new Son(); //向上转型
Son son = (Son) father; //向下转型
son.fun1();
son.fun2();
son.fun3();
}
結果:
息子のメソッドのFUN1の
fun2父のメソッド
息子のメソッドfun3
もう一つ注意すべきは次のとおりです。変態なければならない最初のダウンキャストの前に。