<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    工作小驛

    Ninja!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks

        昨天那節課我們了解了比較重要的概念面向對象,和javaOOP封裝、繼承、多態的特征。但是什么叫做多態,是很多初學者不容易理解的問題。對于繼承來說,很容易理解因為你就看字面的意思就知道它是繼承著父類的特性。多態字面不容易理解了。下面我們具體講一下吧!

        類之間的繼承關系使子類具有父類的所有變量和方法,=> 父類所具有的方法也可以在它所有子類中使用,發給父類的消息也可以發送給子類 => 子類的對象也是父類的對象=>子類的對象既可以做本身的類型,也可以做父類的類型。 呵呵,上述推導公式好像繞口令似的。我們舉個例子理解上述概念。舉例:

        public class 動物 //動物是父類

        public class extends 動物 //貓是子類

    動物的所有特性在貓中可以使用,發給動物的信息貓也能收到=>貓的對象new ();既可以作為本身的類型 anew (); 也可以作為父類的類型 動物 b = new ();這樣說理解了嗎?如有疑問請訪問我們的技術論壇

    如果大家明白了的話,我們就可以從上述公式推導出結論,所有的子類都可以作為父類的類型(同一種類型)來對待。像剛才那個動物有很多子類啊,可以有很多對象。動物 a=new ();動物 b=new (); 動物 c=new ();。這樣的將子類型的對象引用轉換成父類型的對象引用,叫做上溯造型(upcasting)

    我們再來引伸一下,我們在數組那節課里講了,數組存放的元素是相同類型的數據,但是上溯造型使得java允許創建不同類型對象的數組。例如:

    Employee[] staff = new Employee[3];

    staff[0] = new Manager();

    staff[1] = new Secretary();

    staff[2] = new Employee();

    夷?這是怎么回事啊,數組里面不是相同類型嗎?對啊,因為SectetaryManagerEmployee的子類,所以也可以通過上溯造型變成Employee啊。以前我們還學到了所有對象都是從java.lang.Object 繼承下來的。如果數組要是 Object型的話 Object[] obj=new Object[];那就是里面放什么對象都行了。因為什么對象都可以是Object型的。

    實踐:

    // java中的多態

    class Shape {

     void draw() {}

     void erase() {}

    }

    //圓形

    class Circle extends Shape {

     void draw() {

        System.out.println("Circle.draw()");

     }

     void erase() {

        System.out.println("Circle.erase()");

     }

    }

    //正方形

    class Square extends Shape {

     void draw() {

        System.out.println("Square.draw()");

     }

     void erase() {

        System.out.println("Square.erase()");

     }

    }

    //三角形

    class Triangle extends Shape {

     void draw() {

        System.out.println("Triangle.draw()");

     }

     void erase() {

        System.out.println("Triangle.erase()");

     }

    }

    public class Shapes {

     public static Shape randShape() {

        switch((int)(Math.random() * 3)) {

          default:

          case 0: return new Circle();

          case 1: return new Square();

          case 2: return new Triangle();

        }

     }

     public static void main(String[] args) {

        Shape[] s = new Shape[9];

        // 向數組里添加類型

        for(int i = 0; i < s.length; i++)

          s[i] = randShape();

        // 用多態的方法調用

        for(int i = 0; i < s.length; i++)

          s[i].draw();

     }

    } 上述源碼下載

    Java的多態性,有什么意義呢?它的突出優點是使程序具有良好的擴展性。它通過繼承,可以派生出任意多個新類型,或向基類增加更多方法時,無須修改原有對基礎類進行處理的相關程序。就是擴展性好。

        我們返回再看面向對象(專指OOP)的這三個特性封裝、繼承、多態三者的關系。沒有封裝就沒有繼承,沒有繼承就沒有多態。

    posted on 2007-07-31 14:38 王君 閱讀(144) 評論(0)  編輯  收藏 所屬分類: J2SE
    主站蜘蛛池模板: 最新亚洲成av人免费看| 成人一a毛片免费视频| 久久久久亚洲精品天堂久久久久久| 国产午夜亚洲精品| 午夜高清免费在线观看| 亚洲成a人片在线观看天堂无码| 无码中文字幕av免费放| 亚洲中文字幕一区精品自拍| 岛国大片免费在线观看| 国产精品亚洲综合一区在线观看| 免费精品一区二区三区在线观看| 美女尿口扒开图片免费| 亚洲一区二区精品视频| 人妻在线日韩免费视频| 亚洲国产综合专区在线电影| 最近免费中文字幕mv在线电影| 色播亚洲视频在线观看| 可以免费看黄的网站| 久久亚洲精品成人无码| 亚洲国产成人影院播放| 999zyz**站免费毛片| 亚洲美女一区二区三区| 色www永久免费视频| fc2成年免费共享视频18| 亚洲va在线va天堂va不卡下载| 91免费国产自产地址入| 亚洲av无码成人影院一区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 免费观看一区二区三区| 久久精品亚洲一区二区三区浴池| 免费A级毛片无码无遮挡内射| 日韩色日韩视频亚洲网站| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲免费人成视频观看| 国产成人亚洲综合在线| 亚洲AV日韩AV高潮无码专区| 破了亲妺妺的处免费视频国产| 国产区在线免费观看| 一本色道久久综合亚洲精品蜜桃冫| 亚洲精品国产精品乱码不卞| 亚洲精品视频免费看|