一充岛、定義
多態(tài):同一操作作用于不同的對象保檐,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果崔梗,這就是多態(tài)性夜只。
多態(tài)有下面概念:重載、重寫蒜魄、虛方法扔亥、抽象方法以及隱藏方法。
二谈为、重載(overload)
(1)方法名必須相同
(2)參數(shù)列表必須不相同
(3)返回值類型可以不相同
public void Sum()
{
int a = 1 + 1;
}
public void Sum(int input)
{
int a = 1 + input;
}
public int Sum(int input1,int input2)
{
int a = input1 + input2;
return a;
}
三旅挤、重寫(override)
(1)相同的方法名
(2)相同的參數(shù)列表
(3)相同的返回值
說明:子類中需要用override關(guān)鍵字,被重寫的父類方法必須是虛方法伞鲫,用的是virtual關(guān)鍵字粘茄。
class Eat
{
public virtual void EatFood()
{
Console.WriteLine("吃東西");
}
}
class DogEat:Eat
{
public override void EatFood()
{
Console.WriteLine("吃肉");
}
}
四、虛方法(virtual)
(1)父類中允許在子類中被重寫的方法秕脓,使用virtual關(guān)鍵字定義柒瓣。
(2)虛方法也可以被直接調(diào)用。
class Eat
{
public virtual void EatFood()
{
Console.WriteLine("吃東西");
}
}
class DogEat:Eat
{
public override void EatFood()
{
Console.WriteLine("吃肉");
}
}
class Animal
{
Animal()
{
//虛方法也可以被直接調(diào)用
Eat eat = new EatFood();
eat.EatFood();
DogEat dogEat = new DogEat();
dogEat.EatFood();
}
}
五吠架、抽象方法(abstract)
(1)抽象方法只能在抽象類中定義嘹朗。方法和類使用abstract關(guān)鍵字。
(2)抽象方法只是定義方法诵肛,沒有具體的實現(xiàn)(類比接口interfance)屹培。
(3)抽象類無法實例化,需要子類繼承抽象類怔檩,再重寫抽象方法褪秀,然后在實例化子類調(diào)用方法。
public abstract class Eat
{
public abstract void EatFood();
}
public class DogEat : Eat
{
public override void EatFood()
{
Console.WriteLine("吃肉");
}
}
class Animal
{
Animal()
{
//抽象類無法實例化
//Eat eat = new EatFood();
DogEat dogEat = new DogEat();
dogEat.EatFood();
}
}
虛方法和抽象方法的區(qū)別是:
抽象類無法實例化薛训,也就不能直接調(diào)用抽象方法媒吗;虛方法的類如果能實例化,則直接可以調(diào)用虛方法乙埃;