物件導向的封裝性和多態性

來源:互聯網
上載者:User

標籤:

物件導向之封裝性:

1、繼承要符合is-a的關係。即"子類is a 父類"——子類是父類。如:卡車是汽車,卡車is a 汽車。

2、父類中如果用Protected修飾符,表示只允許其子類訪問,而不允許其他非子類訪問:

    父類中如果用private修飾符,子類是不能訪問的。

3、除了構造方法不能被子類繼承外,其他都可以直接被繼承。可以用base關鍵字調用父類的建構函式:文法如下

     :base(參數變數名)

     使用base還可以調用父類的屬性和方法。

     注意:子類建構函式中已經定義了這些參數,在base()中只需指定變數名即可,

              這個變數名必須與父類中的建構函式中的一致

4、繼承的特徵:

     A 繼承的傳遞性

     B 繼承的單根性 表示一個子類只能繼承一個父類。

     C 密封類 它修飾的類是不能被繼承的。用關鍵字sealed

---------------------------------------------------------------------------------------------------------------------------------------------------

物件導向之多態性:

多態是指兩個或多個屬於不同類的對象,對於同一個訊息(方法調用)作出不同響應的方式。實現多態的方式:

一、抽象類別和抽象方法

    1、 抽象類別的文法:

                         存取修飾詞 abstract class 類名

    2、 父類中的方法:

                         存取修飾詞 abstract 傳回型別 方法();

注意:含有抽象方法的類必然是抽象類別。抽象類別中的方法並不一定都是抽象方法。

         抽象類別是不能被執行個體化的。只能通過它的子類來實現該類的方法,除非它的子類也是一個抽象類別。

         抽象類別不能是密封或者靜態,抽象類別被子類繼承並實現它的抽象方法。

    3、重寫抽象方法:

                          存取修飾詞 override 傳回型別 方法()

     4、使用場合:

                       A 父類提供了一個功能或者規定,約束子類的行為。

 樣本:

abstract public class Person
    {
        abstract public void  SayHi();
    }

//子類
   public class  Student:Person
    {
      public override void SayHi()
        { 
             //代碼省略
        }
     }

    public class  Teacher:Person
    {
      public override void SayHi()
        { 
             //代碼省略
         }
     }

裡氏替換原則

     "is"操作符用於檢查對象是否與給定的類型相同。如: if(obj is string){}

     "as"用於兩個對象之間的類型轉換。如:string as obj;

注意:as運算子當轉換失敗時,運算子將產生null,而不是引發異常。

     "is"檢查一個對象是否相容於指定的類型,並返回一個Boolean值:true或者fasle。注意,is操作符永遠不會拋出異常,請看以下樣本:

ClassA

{

.... 

}

Object o=new Object();

Boolean b1=(o is Object); //b1為true. 

Boolean b2=(o is ClassA) ; b2為false.

如果對象引用是null,is操作符總是返回false,因為沒有可檢查的其類型的對象。

 

二、虛方法:

                存取修飾詞 virtual 傳回型別 方法()

               {

                     //方法體

               }

 1、每個對象Object都有一個Equals()方法,用於確定兩個執行個體對象是否相等,它是一個虛方法,可以重寫這個方法。

      public virtual bool Equals(Object obj)

      預設情況下,Equals()方法只支援引用相等,也就是相比較的兩個對象是否引用同一個對象。

      重寫Equals()虛方法如:

        public override bool Equals(object obj)
        {
            //將要比較的對象轉換為當前類型
            Student target = obj as Student;

            //如果為空白、類型不同
            if (target == null)
                return false;

            if (target.name == this.name &&
                target.gender == this.gender &&
                target.age == this.age &&
                target.hobby == this.hobby &&
                target.popularity == this.popularity)
            {
                return true;
            }
            return false;
        }

2、虛方法和抽象方法的區別:

  A、修飾的關鍵字不同

  B、父類中方法體的區別

  C、重寫的區別(抽象方法必須override)

  D、抽象方法只能在抽象類別中,而虛方法除了密封類外都可以寫

3、方法重寫的條件:

     A、方法簽名必須一樣

     B、存取修飾詞允許被放大

     C、傳回型別必須一樣   

總結:物件導向的三大特徵:

        封裝:保證對象自身資料的完整性、安全性

        繼承:建立類之間的關係,實現代碼複用、方便系統的擴充

        多態:相同的方法調用可實現不同的實現方式

三、方法重載

      1、與重寫方法的區別

           A、應用場合不同:如果父類中有abstract/virtual,才能被重寫,重寫方法要求類與類之間是繼承關係。

                                    而重載沒有過多的要求。

四、方法隱藏:父類和子類的方法都存在。

五、靜態(satice)類/密封(sealed)類/抽象(abstract)類它們各自的特點

註:本文轉載於http://www.cnblogs.com/028fly/archive/2009/06/06/1497079.html

物件導向的封裝性和多態性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.