多態(經典案例)


案例:打印  矩形 和 圓形

矩形: x(橫坐標), y(縱坐標),length(長度), wid(寬度)

圓形: x(橫坐標), y(縱坐標), r(半徑)


思路:

矩形 和 圓形 都有 共同的元素:x(橫坐標), y(縱坐標)

那么可以把x, y抽取出來 定義出一個 形狀類作為父類,形狀類中 包含這兩個屬性。

定義一個 矩形類,繼承 形狀類。在自己類中擴展 length(長度), wid(寬度)屬性

定義一個 圓形類,繼承 形狀類。在自己類中擴展 r(半徑) 屬性

寫一個測試類,定義相應的方法 來實現功能。


代碼實現:

1.定義一個形狀類:

public class Shape { // 形狀類
    private int x;  // 描述橫坐標
    private int y;  // 描述縱坐標
    
    public Shape() {
        super();
    }
    public Shape(int x, int y) {
        super();
//        this.x = x;
//        this.y = y;
        setX(x);   // 推薦這種寫法,可以對x,y值做判斷。只需在對應方法中,設置判斷條件即可
        setY(y);
    }
    
    
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    public void show() {
        System.out.println("橫縱坐標:("+getX()+","+getY()+")");
    }   

}

 

2.定義一個矩形類

// 矩形類
public class Rect extends Shape {  
    private int len; //描述長度信息
    private int wid; //描述寬度信息
    
    public Rect() {
        super();
    }
    public Rect(int x, int y,int len, int wid) {
        super(x, y);
        setLen(len);
        setWid(wid);
        
    }
    public int getLen() {
        return len;
    }
    public void setLen(int len) {
        this.len = len;
    }
    public int getWid() {
        return wid;
    }
    public void setWid(int wid) {
        this.wid = wid;
    }
    @Override
    public void show() {
        System.out.println("我是個矩形");
        super.show();
        System.out.println("長度:"+getLen()+"寬度:"+getWid());
    }

}

 

 

3.定義一個圓形類

// 定義 圓形類
public class Circle extends Shape {

    private int r;  //描述半徑

    public Circle() {
        super();
    }

    public Circle(int x, int y, int r) {
        super(x, y);
        setR(r);
    }

    public int getR() {
        return r;
    }

    public void setR(int r) {
        this.r = r;
    }

    @Override
    public void show() {
        
        System.out.println("我是個圓形");
        super.show();
        System.out.println("半徑:"+getR());
        
    }
    
    
    
}

 

 

4.定義一個測視類,並編寫對應的方法來實現功能

 

package com.monkey1025;

public class Test {
    // 自定義一個方法:最好定義成靜態方法,無需new對象,使用 類名.靜態方法()名 的方式調用
    // 要求:該方法既能打印 矩形 又能 打印圓形,具體圖形 由 參數傳入
   
public static void draw(Shape s) { // 讓父類Shape作為形參,這樣的話 實參既能是本類的對象,又可以傳遞子類的對象 // Shape類型的s 在編譯階段只能調用 Shape類型 自己的show()方法 // 但是Shape的任意一個子類對show()方法進行了重寫,在運行階段則調用子類自己重寫的方法 s.show(); } public static void main(String[] args) { // Test.draw(s); 該方法形參需要的是 Shape類型的引用,參既能是本類的對象,又可以傳遞子類的對象 // 創建矩形類的匿名對象 作為實參傳遞給形參 // 其實相當於: Shape s = new Rect(1,2,3,4); 形成了多態 Test.draw(new Rect(1,2,3,4)); System.out.println("-----------------------------"); // 創建圓形類的匿名對象 作為實參傳遞給形參 // 其實相當於: Shape s = new Circle(5,6,7); 形成了多態 Test.draw(new Circle(5,6,7)); } }

 

 


 

 多態的好處:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM