面向?qū)ο笕筇匦?----封裝摩骨、繼承、多態(tài)

前言

前面有文章寫到了面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計的頭五大原則(SOLID五大原則)朗若。今天我們再來談?wù)劽嫦驅(qū)ο蟮娜筇匦?-封裝恼五、繼承、多態(tài)

封裝

被定義為"把一個或多個項目封閉在一個物理的或者邏輯的包中"哭懈。在面向?qū)ο蟪绦蛟O(shè)計方法論中灾馒,封裝是為了防止對實現(xiàn)細節(jié)的訪問。****封裝只公開某些對外接口遣总,隱藏具體實現(xiàn)細節(jié)睬罗。增加了一定的安全性,防止信息的泄露以及破壞旭斥。

講到封裝容达,我們又得提下訪問修飾符了。

  • public:所有對象都可以訪問垂券;
  • private:對象本身在對象內(nèi)部可以訪問花盐;
  • protected:只有該類對象及其子類對象可以訪問
  • internal:同一個程序集的對象可以訪問;
  • protected internal:訪問限于當前程序集或派生自包含類的類型菇爪。

繼承

  繼承是軟件復(fù)用的一種形式算芯。使用繼承可以復(fù)用現(xiàn)有類的數(shù)據(jù)和行為,為其賦予新功能而創(chuàng)建出新類凳宙。

  在現(xiàn)有類(基類熙揍、父類)上建立新類(派生類、子類)的處理過程稱為繼承氏涩。派生類能自動獲得基類的除了構(gòu)造函數(shù)和析構(gòu)函數(shù)以外的所有成員届囚,可以在派生類中添加新的屬性和方法擴展其功能有梆。

  這里繼承又可分為以下系列:

  • 單重繼承:表示一個類可以派生自一個基類,C#采用此繼承
  • 多重繼承:多重繼承允許一個類派生自多個類意系,C#不支持多重繼承淳梦,但允許接口的多重繼承
  • 多層繼承:多層繼承允許有更大的層此結(jié)構(gòu),類B派生自類A昔字,類C派生自類B,其中首繁,類B也稱為中間基類作郭,C#支持它,也很常用弦疮。
  • 接口繼承:允許接口多重繼承

多態(tài)

  多態(tài)指在程序設(shè)計中存在同名不同方法的存在夹攒,主要通過子類對父類的覆蓋來實現(xiàn)多態(tài),設(shè)計原則之一就是要依賴于抽象胁塞,而不依賴于具體咏尝,增加靈活性。多態(tài)就是為了體現(xiàn)這一原則啸罢。

實例講解

這里我們假設(shè)一個場景编检,對圖形的面積進行計算。在這里我們就抽象一個基類扰才,形狀允懂。然后其他的設(shè)計都來繼承它。

    類設(shè)計

 /// <summary>
    /// 抽象類 /// </summary>
    public abstract class Shape
    { private string ShapeName { get; set; } public Shape(string shapeName)
        { this.ShapeName = shapeName;
        } /// <summary>
        /// 計算面積 /// </summary>
        /// <returns></returns>
        public abstract double CalculateArea();
    } /// <summary>
    /// 長方形 /// </summary>
    public class Rectangle:Shape
    { /// <summary>
        /// 長 /// </summary>
        public double Longm { get; set; } /// <summary>
        /// 寬 /// </summary>
        public double Widem { get; set; } public Rectangle():base("Rectangle")
        {
            Longm = 0;
            Widem=0;
        } public override double CalculateArea()
        { return Longm * Widem;
        }
    } /// <summary>
    /// 圓形 /// </summary>
    public class Circle: Shape
    { /// <summary>
        /// 半徑 /// </summary>
        public double R { get; set; } public Circle(): base("Circle ")
        {
            R = 0;
        } public override double CalculateArea()
        { return Math.PI*R*R;
        }
    }

調(diào)用

class Program
    { static void Main(string[] args)
        {
            Console.WriteLine("請選擇計算面積的圖形:長方形(A)/圓形(B)"); string answer = Console.ReadLine(); if (answer=="A")
            { double longm=0; double widem = 0; try {
                    Console.WriteLine("請輸入長:");
                     longm = double.Parse(Console.ReadLine());
                    Console.WriteLine("請輸入寬:");
                     widem = double.Parse(Console.ReadLine());
                } catch (Exception)
                {
                    Console.WriteLine("請輸入數(shù)字!");
                }

                Rectangle rectangle = new Rectangle();
                rectangle.Longm = longm;
                rectangle.Widem = widem;
                Console.WriteLine($"此長方形的面積是{rectangle.CalculateArea()}");
            } else { double r=0; try {
                    Console.WriteLine("請輸入半徑:");
                 r = int.Parse(Console.ReadLine());
                } catch (Exception)
                {
                    Console.WriteLine("請輸入數(shù)字!");
                }
                Circle circle = new Circle();
                circle.R = r;
                Console.WriteLine($"此圓形的面積是{circle.CalculateArea()}");
            }
        }
    }

總結(jié)

本個案例實際作用不是很大衩匣,主要是方便講解理解封裝繼承多態(tài)蕾总,在實例中,對圖形的名稱封裝琅捏,抽象一個抽象類圖形基類生百,圓形和長方形繼承此基類。override 重寫實現(xiàn)面積計算的多態(tài)柄延。更多的還是需要在實際項目中實際運用的蚀浆。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拦焚,隨后出現(xiàn)的幾起案子蜡坊,更是在濱河造成了極大的恐慌,老刑警劉巖赎败,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秕衙,死亡現(xiàn)場離奇詭異,居然都是意外死亡僵刮,警方通過查閱死者的電腦和手機据忘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門鹦牛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勇吊,你說我怎么就攤上這事曼追。” “怎么了汉规?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵礼殊,是天一觀的道長。 經(jīng)常有香客問我针史,道長晶伦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任啄枕,我火速辦了婚禮婚陪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘频祝。我一直安慰自己泌参,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布常空。 她就那樣靜靜地躺著沽一,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漓糙。 梳的紋絲不亂的頭發(fā)上锯玛,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音兼蜈,去河邊找鬼攘残。 笑死,一個胖子當著我的面吹牛为狸,可吹牛的內(nèi)容都是我干的歼郭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辐棒,長吁一口氣:“原來是場噩夢啊……” “哼病曾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起漾根,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤泰涂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辐怕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逼蒙,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年寄疏,在試婚紗的時候發(fā)現(xiàn)自己被綠了是牢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僵井。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驳棱,靈堂內(nèi)的尸體忽然破棺而出批什,到底是詐尸還是另有隱情,我是刑警寧澤社搅,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布驻债,位于F島的核電站,受9級特大地震影響形葬,放射性物質(zhì)發(fā)生泄漏却汉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一荷并、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧青扔,春花似錦源织、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凛剥,卻和暖如春侠仇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犁珠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工逻炊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人犁享。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓余素,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炊昆。 傳聞我的和親對象是個殘疾皇子桨吊,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容