日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象(二)——三大特性(封装、继承、多态)

發(fā)布時(shí)間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象(二)——三大特性(封装、继承、多态) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、封裝

目的保護(hù)類,讓類更加安全。

做法讓類里面的成員變量變?yōu)樗接?#xff08;即訪問修飾符)的,做相應(yīng)的方法或者屬性去間接的操作成員變量

※訪問修飾符

private 私有的? ? ? ? ? ? ? 只能在該類中訪問

protected 受保護(hù)的 ? ? ? 只能在該類和它的子類中訪問

public 公有的? ? ? ? ? ? ? ? 在任何地方都可以訪問

?

封裝成員方法來間接操作類里面的成員變量

例:

?

class Ren{private string name;private int age; //年齡必須在18-50之間//取age的值public int GetAge(){return age;}//給age賦值public void SetAge(int a){if (age >= 18 && age <= 50){age = a;}else{age = 18;}}//取name的值public string GetName(){return name;}//給name賦值public void SetName(string n){name = n;}} View Code

?

static void Main(string[] args){Ren r = new Ren();r.SetAge(8);r.SetName("張三"); //將’張三‘賦值給成員nameConsole.WriteLine(r.GetAge+r.GetName);Console.ReadLine();} View Code

△使用成員屬性來間接訪問類里面的成員變量

  定義變量的時(shí)候最好用_下劃線開頭

  選中要做的成員變量右鍵→重構(gòu)→封裝字段(ctrl+r,e)

? ? ? 自動(dòng)生成的代碼不是成員變量也不是成員方法 ?是成員屬性

? ? ? 造好之后可以通過成員屬性操作成員變量

例:

class Student{private string _Name;public string Name{get { return _Name; }//簡(jiǎn)化的方法set { _Name = value; }}private int _Age;public int Age {get { return _Age; }set {if (value >= 18 && value <= 50){_Age = value;}else{_Age = 18;}}}private string _Sex;public string Sex {get;set;}//簡(jiǎn)寫 缺點(diǎn):不能控制值,不能用于構(gòu)造函數(shù)} View Code static void Main(string[] args){Student s = new Student();s.Name="趙四";s.Sex="";s.Age=19;Console.WriteLine(s.Sex+s.Name+s.Age);Console.ReadLine();} View Code

構(gòu)造方法(函數(shù)):

作用造對(duì)象所要調(diào)用的方法,用來創(chuàng)建對(duì)象

   ? ?每一個(gè)類都有一個(gè)構(gòu)造方法,不寫也有只不過看不到而已

特殊性寫法特殊 (方法名=類名;沒有返回值)

     ?執(zhí)行時(shí)間特殊(創(chuàng)建對(duì)象時(shí)執(zhí)行)

用途可以對(duì)成員進(jìn)行初始化

舉個(gè)例子:

class Student{public Student(string s,string n){_Sex = s;_Name = n;}} View Code

?

static void Main(string[] args){Student s = new Student("","張三");//new Student()就是調(diào)用了一個(gè)方法 Console.WriteLine(s.Sex+s.Name);Console.ReadLine();} View Code

舉個(gè)栗子使用面向?qū)ο髞砬髢蓚€(gè)圓之間的面積

class Program{static void Main(string[] args){Yuan y1 = new Yuan();y1.R = 10;Yuan y2 = new Yuan();y2.R = 5;double cha = y1.mianji() - y2.mianji();Console.WriteLine(cha);Console.ReadLine();}}class Yuan{private int r;public int R{get { return r; }set { r = value; }}public double mianji(){return r * r * 3.14;}public double zhouchang(){return 2 * r * 3.14;}} View Code

函數(shù)重載

函數(shù)重載需要的條件:函數(shù)名要相同,參數(shù)的個(gè)數(shù)或者參數(shù)的類型不同

this關(guān)鍵字:

雖然寫在類里面,但不是屬于類的,而是屬于該對(duì)象的

一般來說在類里面 this關(guān)鍵字是可以省略的,但是如果有一個(gè)方法形參名字和成員名字重復(fù),這時(shí)候再調(diào)用該對(duì)象里面的成員的時(shí)候需要加this關(guān)鍵字

is關(guān)鍵字: 判斷變量是不是屬于某個(gè)類型

例:if (y2 is Ren)   

??? {     

???????????????? s = "是一個(gè)人";   

??? }   

??? else   

??? {     

??????????????? s = "不是一個(gè)人";   

??? }

as關(guān)鍵字: 轉(zhuǎn)換類型(只能轉(zhuǎn)換兼容類型,可以將子類對(duì)象轉(zhuǎn)換為父類對(duì)象)

二、繼承

子類可以繼承父類的一切

特點(diǎn):單繼承 ??一個(gè)子類只能有一個(gè)父類? 一個(gè)父類可以有多個(gè)子類

C#特殊點(diǎn):所有類的祖先都是object

base關(guān)鍵字:在子類中代表父類對(duì)象,用法和this關(guān)鍵字相同        ?

???????????????????如果父類有構(gòu)造方法,那么子類也要有構(gòu)造方法,如果父類構(gòu)造需要參數(shù),那么子類構(gòu)造也必須有相應(yīng)的參數(shù)。        ?

???????????????????子類構(gòu)造后面可以通過base調(diào)用父類的構(gòu)造方法        ?

?????????????????? public China(string m):base(m) {}

class Program{static void Main(string[] args){China c = new China("zs");Console.WriteLine(c.Eat());Console.ReadLine();}}class Ren{private string _Name;public string Name{get { return _Name; }set { _Name = value; }}private int _Age;public int Age{get { return _Age; }set { _Age = value; }}//父類的構(gòu)造方法public Ren(string n){_Name = n;}public string Speak(){return _Name+"人類正在講話";}}class China:Ren{public China(string m):base(m){}public string Eat(){return base.Name+"用筷子吃飯";//return base.Speak(); }}class America : Ren{public America(string m): base(m){}public string Eat(){return "用刀叉吃飯";}} View Code

sealed關(guān)鍵字

密封類 該類不可以被繼承

sealed class 類名

{

}

部分類:partial

可以將一個(gè)類拆分成多個(gè)部分,分別放在多個(gè)文件內(nèi)

調(diào)用需要namespace相同,或用use引用

namespace 命名空間 相當(dāng)于虛擬文件夾

partial class 類名 ? //拆分的類均加partial

{

}

三、多態(tài)

1.編譯多態(tài)

函數(shù)重載

2.運(yùn)行多態(tài)

概念當(dāng)父類引用指向子類實(shí)例的時(shí)候,由于子類對(duì)父類的方法進(jìn)行了重寫,在調(diào)用該方法的時(shí)候表現(xiàn)出的不同就稱為多態(tài)

條件必須要有繼承? 父類引用指向子類實(shí)例? 子類必須對(duì)父類的方法進(jìn)重寫

里氏代換原則:如果有一個(gè)地方需要使用到父類對(duì)象,那么你可以將一個(gè)子類對(duì)象給他

class Program{static void Main(string[] args){DongWu dw = new Dog(); Dog d = new Dog();Console.WriteLine(Ceshi(dw));Console.WriteLine(CeShi(d));Console.ReadLine();}public static string CeShi(DongWu d){return "ok";}}class DongWu{public virtual string Eat() //虛方法 {return "該動(dòng)物在吃飯";}}class Dog:DongWu{public override string Eat() //重寫 {return "狗正在吃骨頭";}}class Cat : DongWu{public override string Eat(){return "貓正在吃魚";}} View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/H2921306656/p/5794359.html

總結(jié)

以上是生活随笔為你收集整理的面向对象(二)——三大特性(封装、继承、多态)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。