一:什麼是多態?
多種形態,既不同的對象對於同一個操作做出的相應不同。
二:.抽象類別的幾個注意事項
1,抽象類別使用abstract修飾
2,抽象方法只能位於抽象類別中
3,抽象類別不能執行個體化
4,抽象方法沒有方法體
5,抽象類別不能是靜態類或者密封類
6,子類必須重寫父類的所有抽象方法,除非子類也是抽象類別
7,抽象類別中可以有普通的方法
8,抽象了中可以有建構函式
9,抽象類別中的抽象方法就是為了約束子類的方法形式。
三:抽象類別的“執行個體化”
雖然抽象類別本身不能通過new進行執行個體化,但他可以將引用對象指向子類的真實對象,也可以稱為間接執行個體化。
Person作為父類
public abstract class Person{ public int Age { get; set; }public string Name { get; set; }public Person(int age,string name) {this.Age = age;this.Name = name;}public abstract void Say();public void Eat(){Console.WriteLine("我是父類");} }
Student類去繼承Person
public class Student:Person{ public Student(string name,int age){ public Student(int age, string name):base(age,name) { this.Age = age; this.Name = name; } public override void Say() { Console.WriteLine("子類說話"); }public void Eat() {Console.WriteLine("我是子類");} }}
父類對象指向子類的真實對象時,子類首先走的是父類的建構函式,在走子類的建構函式,給其屬性賦值。,
Person p = new Student(18, "張宇"); p.Say(); //只有這一種情況,父類變數指向子類對象,調用的是子類的方法, //符合多態,父類和子類方法同名調用的是子類的方法p.Eat(); //如果沒有方法沒有發生關係,則預設調用父類的方法。 Student stu = (Student)p; stu.Eat(); //如果要調用子類的特有的方法,需要進行類型轉換,在java中稱為,向下轉型 Console.ReadKey();