黑馬程序員-java基礎 面向對象的多態

---------------------- 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培訓 、期待與您交流! ----------------------

 

詳細請查看:http://edu.csdn.net/heima

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章