面向對象三大特性-----封裝、繼承、多態

前言

  前面有文章寫到了面向對象編程和麪向對象設計的頭五大原則(SOLID五大原則)。今天咱們再來談談面向對象的三大特性--封裝、繼承、多態html

封裝

   被定義爲"把一個或多個項目封閉在一個物理的或者邏輯的包中"。在面向對象程序設計方法論中,封裝是爲了防止對實現細節的訪問。封裝只公開某些對外接口,隱藏具體實現細節。增長了必定的安全性,防止信息的泄露以及破壞。編程

  講到封裝,咱們又得提下訪問修飾符了。c#

    • public:全部對象均可以訪問;
    • private:對象自己在對象內部能夠訪問;
    • protected:只有該類對象及其子類對象能夠訪問
    • internal:同一個程序集的對象能夠訪問;
    • protected internal:訪問限於當前程序集或派生自包含類的類型。

繼承

  繼承是軟件複用的一種形式。使用繼承能夠複用現有類的數據和行爲,爲其賦予新功能而建立出新類。 安全

  在現有類(基類、父類)上創建新類(派生類、子類)的處理過程稱爲繼承。派生類能自動得到基類的除了構造函數和析構函數之外的全部成員,能夠在派生類中添加新的屬性和方法擴展其功能ide

  這裏繼承又可分爲如下系列:函數

    • 單重繼承:表示一個類能夠派生自一個基類,C#採用此繼承
    • 多重繼承:多重繼承容許一個類派生自多個類,C#不支持多重繼承,但容許接口的多重繼承
    • 多層繼承:多層繼承容許有更大的層此結構,類B派生自類A,類C派生自類B,其中,類B也稱爲中間基類,C#支持它,也很經常使用。
    • 接口繼承:容許接口多重繼承

多態

  多態指在程序設計中存在同名不一樣方法的存在,主要經過子類對父類的覆蓋來實現多態,設計原則之一就是要依賴於抽象,而不依賴於具體,增長靈活性。多態就是爲了體現這一原則。學習

實例講解

  這裏咱們假設一個場景,對圖形的面積進行計算。在這裏咱們就抽象一個基類,形狀。而後其餘的設計都來繼承它。this

    類設計spa

    

 /// <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; } }

   調用設計

   

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("請輸入數字!"); } 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("請輸入數字!"); } Circle circle = new Circle(); circle.R = r; Console.WriteLine($"此圓形的面積是{circle.CalculateArea()}"); } } }

總結

   本個案例實際做用不是很大,主要是方便講解理解封裝繼承多態,在實例中,對圖形的名稱封裝,抽象一個抽象類圖形基類,圓形和長方形繼承此基類。override 重寫實現面積計算的多態。更多的仍是須要在實際項目中實際運用的。

 

  


                      c#基礎知識詳解系列

 

  歡迎你們掃描下方二維碼,和我一塊兒學習更多的C#知識

 

 

  

原文出處:https://www.cnblogs.com/hulizhong/p/11227509.html

相關文章
相關標籤/搜索