1. 程式人生 > >java中的多態案例

java中的多態案例

nbsp 判斷 new println lean tex 多態性 thread 有關

多態性實際上有兩種:

  1.方法的多態性:

    1.1方法重載:相同的方法名,會根據傳入的參數的類型和個數不同執行不同的方法

    1.2方法覆寫:同一個方法名稱,會根據子類的不同實現不同的功能

  2.對象的多態性:指的是發生在類的繼承中,子類和父類之間相互轉換

    1.1向上轉型(自動完成):父類 父類對象 = 子類實例

    2.2向下轉型:子類 子類對象 =(父類)父類實例;

由於父類可以有多個子類,而一個子類所擁有的父類個數不會太多,向上轉型不會出現編譯錯誤,而向上轉型有可能出現編譯時候的錯誤

class A{
	public void print(){
		System.out.println("A中的方法");
	}
}
class B extends A{
	public void print(){
		System.out.println("B中的方法");
	}
}
public class Test{
	public static void main(String args[]){
		A a =new A();
		B b = (B) a;
		b.print();
	}
}
/*
Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B
        at Test.main(Test.java:14)
*/

以上的代碼出現了類轉換的異常,指的是兩個兩個沒有關系的類對象發生強制的向下轉型所帶來的異常,

instanceof關鍵字的使用;該關鍵字主要是判斷某個對象是否是一個類的實例:

對象 instanceof 類//返回的是boolean
class A{
    public void print(){
        System.out.println("A中的方法");
    }
}
class B extends A{
    public void print(){
        System.out.println("B中的方法");
    }
}
public class
Test{ public static void main(String args[]){ A a = new B(); if(a instanceof B){ B b = (B)b; } b.print(); } }

註意點:向下轉型發生之前,一定要先發生對象的向上轉型

  

範例:向上轉型實例

class A{
    public void print(){
        System.out.println("A中的方法");
    }
}
class B extends
A{ public void print(){ System.out.println("B中的方法"); } } public class Test{ public static void main(String args[]){ A a = new B();//向上轉型 a.print();//B中的方法 } }

java中的多態案例