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的抽象編程思想安全

  

 


 向下轉型spa


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爲了解決不安全的向下轉型問題,引入泛型的概念code

爲了安全的類型轉換,最好先用 if(A instanceof  B) 判斷一下對象


 總結blog


 

一、父類引用能夠指向子類對象,子類引用不能指向父類對象。ast

二、把子類對象直接賦給父類引用叫upcasting向上轉型,向上轉型不用強制轉型。class

   如Father father = new Son();test

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

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

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

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

五、向上轉型的做用,減小重複代碼,父類爲參數,調有時用子類做爲參數,就是利用了向上轉型。這樣使代碼變得簡潔。體現了JAVA的抽象編程思想。

相關文章
相關標籤/搜索