小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C# 抽象類

 細(xì)想生活 2015-01-19

1.解釋什么是抽象類?
抽象類是包含抽象方法的類。那么什么又是抽象方法呢?抽象方法是沒有方法內(nèi)容的,只有一個(gè)方法名和參數(shù)列表的方法。并以;結(jié)尾。為了標(biāo)注他的與眾不同,在他的返回類型前加abstract。并在class前加abstract。
簡(jiǎn)言之,由abstract修飾的方法和類就是抽象的方法和類。


2. 抽象類的特點(diǎn)
①  抽象類只能做父類
②  抽象類不能實(shí)例化,既不能用new來(lái)產(chǎn)生屬于抽象類的對(duì)象
③  抽象類中除了抽象方法與普通方法不一樣以外,其他的部分和普通類一樣。即抽象類是普通類的特例,他特殊只是有抽象方法。所以它里面可以有字段,屬性,普通方法。


3.抽象方法的特點(diǎn)
①  抽象方法是沒有方法內(nèi)容的,只有一個(gè)方法名和參數(shù)列表的方法。并以;結(jié)尾。
②  在方法的返回類型前加abstract

③  抽象方法的內(nèi)容由他的繼承類根據(jù)繼承類自身情況去寫。重寫這個(gè)方法時(shí)把a(bǔ)bstract替換成override
注意:②③也是抽象屬性的定義和實(shí)現(xiàn)的方法
 

 

例如:
     abstract   class  Class1  //定義抽象類
    { 

          protected string name;

          protected abstract string Name {  //定義抽象屬性 get;  }

          protected int age;

          protected Class1()

         {

            name = "a";

            age = 4; 

         }

         protected  abstract void A();  //定義抽象方法
    }
   class Class2:Class1 {

      protected override string Nam

     { 

         //實(shí)現(xiàn)抽象屬性get { return name; }

      }

 

      //實(shí)現(xiàn)方法時(shí)他的修飾符只能是范圍比父類大,或是相同
      protected  override void A()

      { 

         //實(shí)現(xiàn)抽象方法
         Console.WriteLine("aaaaaaaaaaaa"); }

         static void Main()

        {

            Class2 c = new Class2(); //正確,繼承類可以定義自己的對(duì)象
            Class1 c1=new Class1(); //錯(cuò)誤,抽象類不能定義自己的對(duì)象
            Console.WriteLine(c.Name + "/n" + c.age);

            c.A();

         }

}

 

4.抽象類里的普通方法如果也想在子類中重寫,有兩種方法:
①在父類普通方法的返回類型前寫virtual,這就告訴系統(tǒng)父類這個(gè)方法是虛的方法,在子類中重寫該方法時(shí),在方法的返回類型前可以什么也不寫,可以寫new,也可以寫override,然后子類對(duì)象調(diào)用的方法就是在子類中重寫的方法。 

②在父類普通方法的返回類型前什么都不寫,在子類中重寫該方法時(shí),在方法的返回類型前可以什么也不寫,可以寫new 。然后子類對(duì)象調(diào)用的方法就是在子類中重寫的方法。 

例如:
Abstract Class C

{

      Protected abstract void A();

      Protected void B(){

           Console.WriteLine("bbbbb");

}

}

Class Class1:C

{

      Protected void A() {

      Console.WriteLine("aaaaaaa");  }

      //Protected new void B(){ //正確}

      //Protected override void B(){//正確}

      Protected void B(){ //正確
 

      Console.WriteLine("cccccccccccccc");

}

Static void Main() {

      Class1 c1=new Class();

      c.A();                         結(jié)果是:aaaaaaa

                                        cccccccccccccc

      c.B();

}

}


本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/wochuailimin/archive/2010/05/27/5629044.aspx

                 抽象類和接口

抽象類

類中定義一些不含方法體的方法,它的方法體實(shí)現(xiàn)交給該類的子類根據(jù)自己的情況去實(shí)現(xiàn),這樣的方法就是抽象方法,包含抽象方法的類就是抽象類。包含的抽象方法一個(gè)或多個(gè)。。

 

定義規(guī)則:

A.      抽象類abstract修飾符來(lái)修飾,抽象方法用abstract來(lái)修飾

B.      抽象類不能實(shí)例化(就是不能用new 去生成對(duì)象)

C.      抽象方法只需聲明,不需實(shí)現(xiàn),

D.      抽象方法的類必須聲明是抽象類,抽象類的子類必須覆蓋所有抽象方法后,才能被實(shí)例化,否則還是個(gè)抽象類

 

 

abstract int aaint a{} // 錯(cuò),有花括號(hào),有實(shí)現(xiàn)部分,只不過為空、、、

正確的形式是:abstract int aaint a);

抽象類中抽象的方法,必須有關(guān)鍵字abstract

 

Vehicle v = new Car(); 正確

// 多態(tài)的體現(xiàn),雖然抽象類不可以創(chuàng)建對(duì)象,但是可以聲明一個(gè)變量,引用可以實(shí)現(xiàn)了抽象方法的的子類對(duì)象,

 

子類可以繼承抽象類的屬性和方法(和普通類繼承一樣),父類抽象類定義非private的成員變量,子類可以繼承

 

 

接口(interface

如果一個(gè)抽象類的所有方法都是抽象的,就可以將這個(gè)類用另外一種方式定義,用接口定義。

接口是抽象方法和常量值的集合,從本質(zhì)上講,接口是一種特殊的抽象類,其中沒有變量和方法實(shí)現(xiàn)。

定義:

 

public interface Runner{

   int ID=1;

   void run( );//// 不用abstract修飾?。∵@點(diǎn)和抽象類不同。。abstract也可以。

}

接口的特點(diǎn)

u       在接口里只能聲明抽象方法。

u       接口只能聲明常量(final)

u       接口里只能聲明public的訪問權(quán)限

  int ID = 1; 相當(dāng)于public static final int ID = 1;

接口定義中成員默認(rèn)都是public訪問類型的,

變量默認(rèn)都是public static final標(biāo)識(shí)的,所以接口中定義的變量都是全局靜態(tài)常量

 

用法:

u       定義一個(gè)新接口,用extends繼承一個(gè)已有接口

u       定義一個(gè)類,用implements去實(shí)現(xiàn)一個(gè)接口中所有方法

u       定義一個(gè)抽象類,用implements去實(shí)現(xiàn)已有接口中的部分方法

u       可以實(shí)現(xiàn)多態(tài),例子如下

  Fly[] flys = new Fly[2];

    //可以實(shí)現(xiàn)多態(tài),只要實(shí)現(xiàn)了接口Fly的類的對(duì)象都可以用flys中元素指向

    flys[0] = new Plane();

    flys[1] = new Bird();

但是只能直接訪問該接口中的定義的方法,如果要調(diào)用另外一個(gè)接口中定義的方法,要進(jìn)行格式轉(zhuǎn)換

Sing s = new Plane();

       s.sing();

       if (s instanceof Fly){ // 飛機(jī)實(shí)現(xiàn)了Fly,和Sing兩個(gè)接口

           ((Fly)s).fly();

       }  

u       多個(gè)接口,用逗號(hào)分隔。例如:class A implements Fly, Sing{};

 

  

接口和抽象類的區(qū)別?


1.
從使用目的來(lái)看:
  
接口只是一個(gè)類間的協(xié)議,它并沒有規(guī)定怎么去實(shí)現(xiàn);
  
抽象類可以重用你代碼使你的代碼更加簡(jiǎn)潔;
2.
從行為來(lái)看:
  
接口可以多繼承,multi-implement
  
抽象類不能實(shí)例化,必須子類化才能實(shí)例化;

3.
從屬性來(lái)看:
  
接口的屬性必須是常量;即public static final;
  
抽象類的屬性沒有要求;
4.
從方法來(lái)看:
  
接口的每個(gè)方法只是聲明不包括內(nèi)容;
  
抽象類的方法即可以是抽象的也可以不是抽象的;一般至少有一個(gè)是抽象的;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多