1. 程式人生 > >java面向對象第三章

java面向對象第三章

3.2 類型 高程 isp final spl 長方形 父類 hid

一、 多態【子類就是父類】

  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(){
        return
weight; } 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 子類();

子類 子類對象 =(子類)對象名;

子類對象.子類方法();

技術分享
//父類
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();
}

父類
父類 技術分享
//子類
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面向對象第三章