黑武士的領地
          ——黑武士是反微軟的JAVA陣營的流氓JAVA程序員
          posts - 26,comments - 4,trackbacks - 0
          <2005年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(3)

          隨筆分類(26)

          隨筆檔案(26)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          簡單整理了各種語言多態(tài)性的相關內(nèi)容以及部分高級特性。
          -------------------------
                                            Delphi
          -------------------------
          【重載】
          加overload
          【虛基類】
          delphi不支持多繼承,所以沒有虛基類這一說。
          【虛函數(shù)】
          父類的虛函數(shù)定義有兩種方式:
          (1)procedure Draw; virtual;
          (2)procedure Draw; dynamic;
          兩者基本是一樣的,前者速度優(yōu)化,后者容量優(yōu)化。
          子類用override覆蓋就行了:
          procedure Draw; override;
          【純虛函數(shù)】
          父類定義如下
          procedure fly(); virtual; abstract;
          子類使用如下:
          procedure fly(); override;
          【抽象類】
          不清楚DELPHI有沒有這個概念,印象中好像沒有提及過。
          【接口】
          IFoo=interface
           ['{2137BF60-AA33-11D0-A9BF-9A4537A42701}']
           function F1:Integer;
          end;
          IBar=interface
           ['{2137BF61-AA33-11D0-A9BF-9A4537A42701}']
           function F1:Interger;
          end;
          【屬性】
          TMyObject=class
          private:
           SomeValue:Integer;
           procedure SetSomeValue(AValue:Integer);
          public:
           property Value:Integer read SomeValue write SetSomeValue;
          end;
          procedure TMyObject.SetSomeValue(AValue:Integer);
          begin
           if SomeValue<>AValue then
            SomeValue:=AValue;
          end;
          ----------------------
                                        C++
          ----------------------
          【重載】
          定義同名不同參的函數(shù)就行了,沒有專門的關鍵字。
          【虛基類】
          多繼承時用virtual關鍵字聲明繼承方式,避免基類中同類成員的多拷貝。
          class A       //定義基類A
          {
          A(int i){}       //基類構造函數(shù),有一個參數(shù)
               …
           };
          classB:virtual public A     //A作為B的虛基類
          {
          B(int n):A(n){}     //B類構造函數(shù),在初始化表中對虛基類初始化
               …
          };
          classC:virtual public A   //A作為C的虛基類
          {
          C(int n):A(n){}  //C類構造函數(shù),在初始化表中對虛基類初始化
               …
          };
          classD:publicB,publicC    //類D的構造函數(shù),在初始化表中對所有基類初始化
          {
          D(int n):A(n),B(n),C(n){}

            }
          【虛函數(shù)】
          在父類中用virtual聲明函數(shù),并實現(xiàn)函數(shù)的定義;
          在子類中重載此函數(shù),可以實現(xiàn)動態(tài)聯(lián)編。
          父類包含虛函數(shù):
          class Point
          {
          public:
           Point(double i,double j) {x=i;y=j;}
           virtual double Area() const {return 0.0;}
          private:
           double x,y;
          };
          子類中覆蓋虛函數(shù):
          class Rectangle:public Point
          {
          public:
           Rectangle(double i,double j,double k,double 1);
           virtual double Area() const { return w*h;}
          private:
           double w,h;
          };
          調(diào)用這個函數(shù)實現(xiàn)動態(tài)聯(lián)編:
          void fun(Point &s)
          {
           cout<<s.Area()<<endl;
          }
          【純虛函數(shù)】
          用關鍵字virtual聲明的函數(shù),并且不實現(xiàn)函數(shù)的定義。
          例如下面的類中定義了兩個純虛函數(shù),
          class point
          {
          public:
           point(int i=0,int j=0)  {x0=i;y0=j;}
           virtual void set()=0;
           virtual void draw()=0;
          protected:
           int x0,y0;
          };
          【抽象類】
          稱帶有純虛函數(shù)的類為抽象類,只能作為基類。
          抽象類是一種特殊的類,它是為了抽象和設計的目的而建立的,它處于繼承層次結構的較上層,抽象類是不能定義對象的,在實際中為了強調(diào)一個類是抽象類,可將該類的構造函數(shù)說明為保護的訪問控制權限。
          class Shape
          {
           public:
            virtual float area() const{return 0.0;}
            virtual float volume() const{return 0.0;}
            virtual void shapeName() const =0;
          };
          子類中若不重載父類中的函數(shù),則子類也是抽象類。
          【接口】
          形式上就是把抽象類中的class換成interface,可以從其他接口繼承,當然最主要的被別的類繼承。
          如COM中常用的IUnknown接口聲明如下:
          interface IUnknown{
           virtual HRESULT STDMETHODCALLTYPE
            QueryInterface(REFIID riid,void **ppv)=0;
           virtual ULONG STDMETHODCALLTYPE AddRef(void)=0;
           virtual ULOND STDMETHODCALLTYPE Release(vod)=0;
          };
          C++中一般用抽象類來實現(xiàn)接口。
          【屬性】
          標準C++中沒這東東。
          --------------------------
                                               C#
          --------------------------
          【重載】
          定義同名不同參的函數(shù)就行了,沒有專門的關鍵字,和C++一樣。
          【虛基類】
          單繼承下不流行這玩意。
          【虛函數(shù)】
          在父類中用virtual聲明函數(shù),并實現(xiàn)函數(shù)的定義;
          public virtual bool SQLExe(bool b)
          {
              return true;
          }
          在子類中用override覆蓋此函數(shù),可以實現(xiàn)動態(tài)聯(lián)編。
          【純虛函數(shù)】
          用關鍵字abstract聲明的函數(shù),并且不實現(xiàn)函數(shù)的定義,必須存在于抽象類中。
          public abstract bool f();
          在子類中用override覆蓋此函數(shù)。
          【抽象類】
          用abstract聲明,父類中可包含虛函數(shù)聲明,并不實現(xiàn)虛函數(shù)的定義,只能作為基類。
          public abstract class cl
          {
              public cl(){}
              public abstract bool f();
          }
          【接口】
          和類定義類似,用interface說明。
          [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
          1、attributes(可選):附加的定義性信息。
          2、modifiers(可選): 允許使用的修飾符有 new 和四個訪問修飾符。
          分別是:new、public、protected、internal、 private。
          在一個接口定義中同一修飾符不允許出現(xiàn)多次,new 修飾符只能出現(xiàn)在嵌套接口中,表示覆蓋了繼承而來的同名成員。
          public, protected, internal, and private 修飾符定義了對接口的訪問權限。
          3、指示器和事件。
          4、identifier:接口名稱。
          5、base-list(可選):包含一個或多個顯式基接口的列表,接口間由逗號分隔。
          6、interface-body:對接口成員的定義。
          7、接口可以是命名空間或類的成員,并且可以包含下列成員的簽名: 方法、屬性、索引器 。
          8、一個接口可從一個或多個基接口繼承。
          允許實現(xiàn)多個接口
          例如一個帶事件的接口定義如下:
          public delegate void StringListEvent(IStringList sender);
          public interface IStringList
          {
           void Add(string s);
           int Count { get; }
           event StringListEvent Changed;
           string this[int index] { get; set; }
          }
          【屬性】
          private int myheight;
          public int MyHeight
          {
             get{
                   return this.myheight;
                }
             set
                {
                   this.myheight = value;
                }
          }
          --------------------------
                                                JAVA
          --------------------------
          【重載】
          函數(shù)同名不同參就行了。
          【虛基類】
          單繼承不流行這玩意!
          【虛函數(shù)】
          沒有這個概念,java自動實現(xiàn)了動態(tài)聯(lián)編,不信你試試!
          【純虛函數(shù)】
          在JAVA里叫抽象函數(shù),不叫純虛函數(shù),必須定義在抽象類里面,而且沒有方法體。例如:
          abstract class Demo {
           abstract void method1();
           abstract void method2();
           …

          【抽象類】
          abstract class Demo {
           abstract void method1();
           abstract void method2();
           …

          【接口】
          知道有了抽象類,為什么還要接口嗎?因為java是單繼承,但是接口可以繼承多個!
          實現(xiàn)多數(shù)設計模式的關鍵技術:
          interface Demo {
           void method1();
           void method2();
           …
          }
          【final類】
          final類不能被繼承 
          如果你認為一個類的定義已經(jīng)很完美,不需要再生成它的子類,這時也應把它修飾為final類 
          final class classname{...} 
          posted on 2005-08-01 15:21 黑武士 閱讀(146) 評論(0)  編輯  收藏 所屬分類: JAVA技術
          主站蜘蛛池模板: 辉县市| 齐齐哈尔市| 乌审旗| 怀宁县| 库尔勒市| 板桥市| 平远县| 阜新市| 仙游县| 天门市| 株洲市| 通城县| 西青区| 台南县| 股票| 保亭| 民权县| 卫辉市| 房山区| 广安市| 保康县| 德惠市| 甘肃省| 津市市| 黔西| 新泰市| 晋中市| 资源县| 安徽省| 那坡县| 遵化市| 鹤壁市| 龙里县| 营口市| 牡丹江市| 合川市| 甘孜县| 景洪市| 长治市| 斗六市| 喀什市|