天若有情

          到教堂懺悔,愿主安撫我罪惡的心靈......
          posts - 4, comments - 35, trackbacks - 0, articles - 24

          接口回調(接口引用)及類的引用

          Posted on 2008-08-07 01:49 freedoom 閱讀(578) 評論(0)  編輯  收藏 所屬分類: JAVA技術
           

          package dao;

          class Father{

              void method(){

                 System.out.println("Father method called.....");

              }

          }

          class Son extends Father{

              void method(){

                 System.out.println("Son method called.....");

              }

          }

          publicclass TestAbstract{

              publicstaticvoid main(String args[]){

                 Father f;

                 Son son=new Son();

                 f=son;

          //     Father f=new Son();

                 f.method();

              }

          }

          為什么可以用Father f=new Son();

          因為Father的范圍比Son的范圍大,編輯器會幫助我們將子類的類型的自動轉換為父類的類型,這即是父類的引用,子類的對象,

          注意:這里子類Son已經重寫了父類的method()方法,所以當運行f.method();時調用的是子類的方法,所以這里可以得出兩點結論,即:

          Father f=new Son();運行時:

          1.)是父類的引用,子類的對象,實際運行時調用的是被子類重寫的方法。

          2.)子類重寫父類的方法,只能重寫父類公共的、非靜態的方法。

          同理)

          以下是接口引用的問題:注意其中的區別。

          接口引用

          static void Main(string[] args)
          {
              IBankAccount venusAccount = 
          new SaverAccount();
              IBankAccount jupiterAccount = 
          new CurrentAccount();
              venusAccount.PayIn(200);
              jupiterAccount.PayIn(500);
              Console.WriteLine(venusAccount.ToString());
              jupiterAccount.PayIn(400);
              jupiterAccount.Withdraw(500);
              jupiterAccount.Withdraw(100);
              Console.WriteLine(jupiterAccount.ToString());

          }


            請注意開頭兩句,我們把它們聲明為IBankAccount(這是一個接口)引用的方式,而沒有聲明為類的引用,為什么呢?因為,這樣我們就可以讓它指向執行這個接口的任何類的實例了,比較靈活。這也就是接口回調。但這也有個缺點,如果我們要執行不屬于接口的方法,比如這里重載的ToString()方法,就要先把接口的引用強制轉換成合適的類型了。

          接口回調的例子:

          interface People{

             void peopleList();

          }

          class Student implements People{

             public void peopleList(){

              System.out.println("I’m a student.")

          }

          }

          class Teacher implements People{

            public void peopleList(){

              System.out.println("I’m a teacher.");

          }

          }

          public class Example{

            public static void main(String args[]){

              People a;             //聲明接口變量

          a=new Student();      //實例化,接口變量中存放對象的引用

          a.peopleList();        //接口回調

          a=new Teacher();     //實例化,接口變量中存放對象的引用

          a.peopleList();       //接口回調

          }

          }

                 結果:

          I’m a student.

          I’m a teacher

          主站蜘蛛池模板: 岫岩| 肇源县| 衡阳市| 读书| 安阳县| 南部县| 共和县| 天镇县| 龙江县| 洛宁县| 西林县| 重庆市| 普兰县| 甘孜县| 武宁县| 慈利县| 南雄市| 会理县| 常熟市| 白朗县| 寿宁县| 广平县| 河池市| 沽源县| 万年县| 哈巴河县| 固始县| 乌兰县| 奉贤区| 会泽县| 吉林省| 丹东市| 宜黄县| 宁明县| 中宁县| 洛浦县| 宣威市| 红安县| 横峰县| 满城县| 延长县|