一:什么是多態?
多種形態,既不同的對象對於同一個操作做出的相應不同。
二:.抽象類的幾個注意事項
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();