標籤:
剛開始接觸java轉型,雖然現在還不知道為什麼要轉型,但是先強記下文法吧
向上轉型:
首先要有一個父類,一個子類,
Person p=new Person();
p=new Student();
OK,這就是向上轉型,可以簡化成:Person p=new Student();
1) p是Person的引用,指向Student的對象,p不是對象;
2) p只能調用父類中有的成員變數與成員函數,子類中新有的方法與變數p不能使用,而執行的主體是子類的主體。
例如 class Person{
void eat(){system .out.println("eating...")}
void sleep(){system.out.println("sleep...")}
}
class Student extends Person{
void eat(){system.out.println("I am a student")}
void read(){system.out.println("I am reading...")}
}
p可以調用eat方法,執行的是Student裡的函數主體;也可以調用sleep方法,子類裡沒有sleep方法,所以執行父類裡函數主體;
但不能調用read方法,因為Person沒有read方法;
向下轉型:
向下轉型是在向上轉型的基礎上加一行
Student s=(Student)p;
同樣s也不是對象,是引用
s可以調用父類與子類裡的所有方法,都執行子類中的函數主體,子類中沒有的,則執行父類中的函數主體
總結:
1、父類引用可以指向子類對象,子類引用不能指向父類對象。
2、把子類對象直接賦給父類引用叫upcasting向上轉型,向上轉型不用強制轉型。
如Father father = new Son();
3、把指向子類對象的父類引用賦給子類引用叫向下轉型(downcasting),要強制轉型。
如father就是一個指向子類對象的父類引用,把father賦給子類引用son 即Son son =(Son)father;
其中father前面的(Son)必須添加,進行強制轉換。
4、upcasting 會丟失子類特有的方法,但是子類overriding 父類的方法,子類方法有效
不知道這裡有沒有錯誤,即使有錯誤現在也發現不了,慢慢學吧,就這樣
java的向上轉型與向下轉型