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 父類的方法,子類方法有效
不知道這里有沒有錯誤,即使有錯誤現在也發現不了,慢慢學吧,就這樣