---------------------- android培訓 、java培訓 、期待與您交流! ----------------------
多態:可以理解爲事物存在的多種形態。
1多態的實現:父類引用指向子類的引用,父類的引用也可以接受自己的子類對象
2多態的前提 必須是類與類之間有關係,要麼繼承,要麼實現。子類還要重寫父類的方法
3多態的好處 提高了程序的擴展性
4多態的弊端 只能在父類的引用中訪問父類的成員
對象轉型:子類類轉爲父類類型,爲向上轉型(自動提升)。父類類型轉爲子類類型 爲向下轉型(強制轉換)。向下轉型必
須簡直在向上轉型的基礎上,不能直接將父類對象轉換爲子類類型。多態自始自終都是子類對象在變化。
在多態中非靜態成員函數的特點:
在編譯時期,參閱應用型變量所屬的類中是否有調用的方法,如果有編譯就通過,沒有編譯就失敗。
在運行時期,參閱對象所屬的類是否有調用的方法。
簡單的說就是,非靜態成員函數在多態調用時,編譯看左邊,運行看右邊。
靜態成員函數編譯和運行都看左邊
成員變量編譯和運行都看左邊
object類 : 基類,所有類的最終父類。
例子
父類
public class Person {
public String name = "lisi";
public int age = 40;
public static void save() {
System.out.println("Person save");
}
public void add() {
System.out.println("Person add");
}
}
子類
public class Student extends Person {
public String name="zhangsan";
public int age=20;
public static void save() {
System.out.println("student save");
}
public void add() {
System.out.println("student add");
}
}
public class Test {
public static void main(String[] args) {
Person p = new Student();//向上轉型 自動提升
p.save();//無法覆蓋父類靜態方法,打印Person save
p.add();//覆蓋父類非靜態方法,打印student add
System.out.println(p.name);//成員變量編譯和運行都看左邊 打印lisi
Person p1=new Person();
//Student s1 =(Student)p1; 這裏強制轉換運行會報錯
Student s =(Student) p;//向下轉型 需強制轉換。
s.save();//打印student save
s.add();//打印student add
System.out.println(s.name);//打印zhangsan
}
}
執行結果
Person save
student add
lisi
student save
student add
zhangsan
---------------------- android培訓 、java培訓 、期待與您交流! ----------------------