一、抽象類與接口 1、類似處:他們都包含可以由派生類繼承的成員。都不能實例化,但可以聲明他們的變量。如果這樣做,就可以使用多態性把繼承這兩中類型的對象指定給他們的變量。接著通過這些變量來使用這些類型的成員,但不能直接訪問派生對象的其它成員。
2、區別:派生類只能繼承一個基類,即只能直接繼承一個抽象類,但可以通過一個繼承鏈來包含多個抽象類。相反,類可以使用任意多個接口。 按照定義,接口成員是公共的(因為它們傾向于外部使用),但抽象類的成員可以是私有的、受保護的、內部的或受保護的內部成員。 此外,接口不能包含字段、構造函數、靜態成員或常量 。
3、這說明這兩種類型用于完全不同的目的。抽象類主要用作對象系列的基類,共享某些主要的特性,例如共同的目的和結構。接口則主要用于類,這些類在基礎水平上有所不同,但仍可以完成某些相同的任務。
舉例說明:假如有一個對象系列表現火車,基類Train包含火車的核心定義,比如輪胎和引擎規格。但這個類是抽象的,我們不能開著這樣的火車 。所以,我們給它添加一些特性(真實的發動機、好的輪胎),得到了“蒸汽”和“汽油”火車兩個派生類 Train_A 和 Train_B 。
接著,我們來考慮,汽車做好了,我們可以用來做什么?對,搭乘客,裝貨物,而這兩種方法我們可以
放在接口 Interface 中,這樣他們就有了共同的任務。
二、結構類型
1、結構和類非常相似,但結構是值類型的,類是引用類型的,這意味著什么?舉例說明:
namespace exmaple_1 {
{ class Myclass
     class Myclass {
    { publlic  int  val ;
         publlic  int  val ; }
     }
 struct   myStruct
    struct   myStruct {
    { public   int   val;
          public   int   val; }
    }
 class PRogram
    class PRogram {
   { static void Main(String[]  args)
      static void Main(String[]  args) {
       { Myclass   A  =   new  Myclass() ;
             Myclass   A  =   new  Myclass() ; Myclass   B  =    A;
             Myclass   B  =    A; A.val=10;
            A.val=10; B.val=20;
            B.val=20; myStruct  C =  new   myStruct() ;
            myStruct  C =  new   myStruct() ; myStruct  D = C ;
            myStruct  D = C ; C.val=30;
            C.val=30; D.val=40;
            D.val=40; Console.WriteLine("A.val={0}", A.val) ;
           Console.WriteLine("A.val={0}", A.val) ; Console.WriteLine("B.val={0}", B.val) ;
           Console.WriteLine("B.val={0}", B.val) ; Console.WriteLine("C.val={0}", C.val) ;
           Console.WriteLine("C.val={0}", C.val) ; Console.WriteLine("D.val={0}", D.val) ;
           Console.WriteLine("D.val={0}", D.val) ; Console.ReadKey() ;
           Console.ReadKey() ; }
        } }
  } 運行后,得到的結果是 :        A.val =20,  B.val=20 ,  C.val=30,  D.val=40 。
 運行后,得到的結果是 :        A.val =20,  B.val=20 ,  C.val=30,  D.val=40 。
新聞熱點
疑難解答