前面有文章寫到了面向對象編程和麪向對象設計的頭五大原則(SOLID五大原則)。今天咱們再來談談面向對象的三大特性--封裝、繼承、多態編程
被定義爲"把一個或多個項目封閉在一個物理的或者邏輯的包中"。在面向對象程序設計方法論中,封裝是爲了防止對實現細節的訪問。封裝只公開某些對外接口,隱藏具體實現細節。增長了必定的安全性,防止信息的泄露以及破壞。安全
講到封裝,咱們又得提下訪問修飾符了。bash
繼承是軟件複用的一種形式。使用繼承能夠複用現有類的數據和行爲,爲其賦予新功能而建立出新類。 ide
在現有類(基類、父類)上創建新類(派生類、子類)的處理過程稱爲繼承。派生類能自動得到基類的除了構造函數和析構函數之外的全部成員,能夠在派生類中添加新的屬性和方法擴展其功能。函數
這裏繼承又可分爲如下系列:學習
多態指在程序設計中存在同名不一樣方法的存在,主要經過子類對父類的覆蓋來實現多態,設計原則之一就是要依賴於抽象,而不依賴於具體,增長靈活性。多態就是爲了體現這一原則。ui
這裏咱們假設一個場景,對圖形的面積進行計算。在這裏咱們就抽象一個基類,形狀。而後其餘的設計都來繼承它。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#知識