c#中的多型
多型:不同的物件收到相同的訊息時,會產生不同的行為
多型的兩種體現形式
1.重寫父類方法
1>使用new關鍵字,隱藏父類方法
public class Person
{
public void Show()
{
Console.WriteLine("我是人別害怕");
}
}
public class Teacher:Person
{
public new void Show()
{
Console.WriteLine("我是老師別害怕");
}
}
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher();
t.Show();
}
}
2>虛方法重寫
將父類中的方法用virtual修飾,子類中用override關鍵字重寫父類方法
public class Person
{
public virtual void Show()
{
Console.WriteLine("我是人別害怕");
}
}
public class Teacher:Person
{
public override void Show()
{
Console.WriteLine("我是老師別害怕");
}
}
注意:
①虛方法不能用 static 修飾
②虛方法不能用 private 修飾,因為虛方法就是讓子類來重寫的,如果宣告為 private,子類就無法重寫,所以不能是私有的
③虛方法中要有方法體,可以被子類重寫,也可以不被子類重寫
3>抽象方法重寫
public class Person
{
public abstract void Show();
}
public class Teacher:Person
{
public override void Show()
{
Console.WriteLine("我是老師別害怕");
}
}
4>使用new關鍵字和使用override的區別
new:子類中還有父類的方法,只不過父類的方法被隱藏了
override:子類的方法覆蓋了父類的方法
例子:
//使用new關鍵字
public class Person
{
public void Show()
{
Console.WriteLine("我是人別害怕");
}
}
public class Teacher:Person
{
public new void Show()
{
Console.WriteLine("我是老師別害怕");
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Teacher();
p.show(); //呼叫父類的方法
Teacher t = new Teacher();
t.Show(); //呼叫子類自己的方法
((Person)t).show(); //仍然呼叫父類的方法
}
}
//使用override重寫父類的方法
public class Person
{
public virtual void Show()
{
Console.WriteLine("我是人別害怕");
}
}
public class Teacher:Person
{
public override void Show()
{
Console.WriteLine("我是老師別害怕");
}
}
public class Student:Person
{
public override void Show()
{
Console.WriteLine("我是學生別害怕");
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.show(); //呼叫Person類的方法
Person t = new Teacher();
p.show(); //呼叫Teacher類的方法
Person s = new Student();
s.show(); //呼叫Student類的方法
}
}
2.介面
介面也是多型的一種體現,介面是一種規範,它規定了能幹什麼,如果某一個類實現了介面,就必須實現介面中的方法。
interface IFly
{
void IFly();
}
public class Teacher:Person,IFly
{
public void IFly()
{
Console.WriteLine("我是老師,我會飛");
}
}
public class Student:IFly
{
public void IFly()
{
Console.WriteLine("我是學生,我會飛");
}
}
class Program
{
static void Main(string[] args)
{
IFly ifly = new Teacher();
ifly.IFly();
IFly ifly = new Student();
ifly.IFly();
}
}