java面向對象第三章
一、 多態【子類就是父類】
1、 為什麽使用多態
提高程序可擴展性,可維護性,提高代碼可重用性
2、 什麽是多態【P71】
具有表現多種形態能力的特征 同一個實現接口,使用不同的實例而執行不同的操作
3、 如何使用多態
l 方法的參數類型是父類
訪問修飾符 返回類型 方法名(父類名 對象名){
……………………………………………….
}
調用方法時,可以傳遞子類的對象
3.1 父(子)類名 對象 = new 子類名();
3.2 方法名(子類對象);
3.3 方法的返回類型是父類
訪問修飾符 父類名 方法名([參數列表]){
return 父類對象或子類對象;
}
//子類,圓形 public class Circular extends Graph { private final double X=3.14; //半徑 public Circular(double r){ super(r); } public void getArea(){ double m=(super.getLen()*X*X); System.out.println("圓的半徑為"+super.getLen()+"\n面積為"+m); }
//子類,長方形 public class Rectangle extends Graph { private double weight; //寬度 public Rectangle(double len,double weight){ super(len); this.weight=weight; } public double getWeight(){ returnweight; } public void getArea(){ double m=(super.getLen()*this.getWeight()); System.out.println("長方形的長為"+super.getLen()+",寬為"+this.weight+"\n面積為"+m); }
//父類 public abstract class Graph { private double len; //圖形的邊長 public Graph(double len){ this.len=len; } //獲取長度 public double getLen(){ return len; } //抽象面向方法 public abstract void getArea(); }
4、 多態中子類和父類之間的轉換
a) 子類到父類的轉換(向上轉換)
父類 對象名 = new 子類();//自動進行轉換
對象名.方法名([值]);
向上轉換的使用規則【P72】:
l 父類引用指向子類對象時稱為向上轉換或轉型(upcasting),自動進行類型轉換
l 通過父類引用變量,調用的方法是子類覆蓋(重寫)或繼承父類的方法【選擇題1、2】
l 通過父類引用變量,無法調用子類特有的方法【選擇題3】
b)父類到子類的轉換(向下轉換)——強制類型轉換,還原對象的真實面目(具體是哪種子類)
父類 對象名 = new 子類();
對象名.子類方法();//編譯有錯誤
應修改為:
父類 對象名 = new 子類();
子類 子類對象 =(子類)對象名;
子類對象.子類方法();
![技術分享](/img/jia.gif)
//父類 public abstract class Zhu { private String name; //兩者的姓名 private String food; private String nation; /** * @return the name */ public String getName() { return name; } public String getNation(){ return nation; } public Zhu(String name,String food,String nation){ this.name=name; this.food=food; this.nation=nation; } public String getFood(){ return food; } public abstract void print(); } 父類父類
![技術分享](/img/jia.gif)
//子類 public class YueHan extends Zhu{ private String habit; public YueHan(String name,String habit,String food,String nation){ super(name,food,nation); this.habit=habit; } public String gethabit(){ return habit; } public void print(){ System.out.println("我叫"+super.getName()+",來自"+super.getNation()+",喜歡吃"+this.getFood()+",愛好是打"+this.gethabit()); } }子類
java面向對象第三章