1.什么是抽象類
1.1虛方法是用virtual修飾,在子類中用override進行重寫
1.2虛方法是一個方法,放在類里面(可以再下面的代碼中看到)
1.3虛方法可以 重寫,也可以不重寫(這個可以再下面的代碼中看到)
2.多態的實現
2.1什么都不說了,直接上代碼,然后我在解釋吧
//先在命名空間下定義一個類,類里面放虛方法 class Person { //類是指具有統一特征和行為的抽象,比如說電腦 //對象是類的具體,比如說這個電腦,你眼前的這個電腦,具體的這個電腦 //類中可以有字段,屬性和方法 private string _name; //字段 public string name//屬性 { get { return _name; } set { _name = value; } } private float _height; public float height//屬性 { get { return _height; } set { _height = value; } } private int _age; public int age//屬性 { get { return _age; } set { if(age<0) { _age = 0; } _age = value; } } private char _sex; public char sex { get { return _sex; } set { if(sex == '女'||sex == '男') _sex = value; else _sex = '男'; } } public virtual void say()//虛方法 { Console.WriteLine("你好,我是一個人類,我叫{0}",_name); } //在定義一個Teacher類,繼承Person,在子類中重寫虛方法 class Teacher:Person { private string _address; public string address//在子類中新增加的屬性 { get { return _address; } set { _address = value; } } public override void say()//虛方法重寫 { Console.WriteLine("我是一個老師,我叫{0}",name); } //在定義一個Student類,繼承Person,在子類中重寫虛方法 class Students:Person { private int _stuId; public int stuId { get { return _stuId; } set { _stuId = value; } } // public override void say() //虛方法可以重寫,也可以不重寫 // { // Console.WriteLine("大家好,我是一名學生,我叫{0}",name); // } }
2.2接下面來看看上面的代碼,至於具體的語法這里就不細說了,都是基礎的,今天主要看一下虛方法實現多態, 定義一個父類變量Person p= new Students(); p = new Teacher();
在這里我們可以運行代碼看到,Person的對象p可以表現出Students類的特征或者Teacher的一些特征,這就是多態,子類表現出不同的形態.
2.2.1 使用多態的時候,系統先檢測父類中的方法是否有virtual關鍵字,即檢查是否重寫,如果沒有重寫直接調用父類中的方法,如果重寫了,就會轉到相應的子類中調用重寫的方法
2.2.2 在子類中新添加的屬性,方法等,在用虛方法實現多態的時候,是調用不到的, 對於這個個人是這樣理解的,因為子類是繼承與父類的,所以子類里面的一些屬性,父類里面是不存的,這樣的話,在創建出子類對象然后轉化為父類的時候,一些屬性就用不了了
2.2.3 父類里面先裝了學生類,然后然后又裝了老師類, 裝了那個類的對象,父類就會表現是那個類的特征,從而實現多態
Csharp多態的實現概述