1. 程式人生 > >java之 向上轉型與向下轉型

java之 向上轉型與向下轉型

向上轉型


 

class father {
	public void eat(){
		System.out.println("father eat()");
	}
}
class son extends father {
	public void sleep(){
		System.out.println("son sleep()");
	}
	public void eat(){
		System.out.println("son eat()");
	}

}

public class test1 {
	public static void main(String[] args) {
	
	father f = new son();//向上轉型
	f.eat();
	//f.sleep()  f雖然也指向了son物件,但是向上轉型的代價是會丟丟失與父類不同的方法
	}

}

 向上轉型的好處

這樣使程式碼變得簡潔。體現了JAVA的抽象程式設計思想

  

 


 向下轉型


class father {
    public void eat(){
        System.out.println("father eat()");
    }
}
class son extends father {
    public void sleep(){
        System.out.println("son sleep()");
    }
    public void eat(){
        System.out.println(
"son eat()"); } } public class test1 { public static void main(String[] args) { father f = new son();//向上轉型 f.eat(); //f.sleep() f雖然也指向了son物件,但是向上轉型的代價是會丟丟失與父類不同的方法 son s = (son)f;//向下轉型 s.eat(); s.sleep(); /* * 這種方法執行的時候會報錯 father fa = new father(); son so = (son)fa; so.eat(); so.sleep();
*/ } }

 

Java為了解決不安全的向下轉型問題,引入泛型的概念

為了安全的型別轉換,最好先用 if(A instanceof  B) 判斷一下


 總結


 

1、父類引用可以指向子類物件,子類引用不能指向父類物件。

2、把子類物件直接賦給父類引用叫upcasting向上轉型,向上轉型不用強制轉型。

   如Father father = new Son();

3、把指向子類物件的父類引用賦給子類引用叫向下轉型(downcasting),要強制轉型。

   如father就是一個指向子類物件的父類引用,把father賦給子類引用son 即Son son =(Son)father;

   其中father前面的(Son)必須新增,進行強制轉換。

4、upcasting 會丟失子類特有的方法,但是子類overriding 父類的方法,子類方法有效

5、向上轉型的作用,減少重複程式碼,父類為引數,調有時用子類作為引數,就是利用了向上轉型。這樣使程式碼變得簡潔。體現了JAVA的抽象程式設計思想。