1.虚方法(提一个父类,子类继承父类,父类方法前➕virtual,子类方法前➕override)【不用判断并强转子类再调用子类方法】
class Program
{
static void Main(string[] args)
{
//概念:让一个对象能够表现出多种的状态(类型)
//实现多态的3种手段:1、虚方法 2、抽象类 3、接口
Chinese cn1 = new Chinese("韩梅梅");
Chinese cn2 = new Chinese("李雷");
Japanese j1 = new Japanese("树下君");
Japanese j2 = new Japanese("井边子");
Person[] pers = { cn1, cn2, j1, j2};
for (int i = 0; i < pers.Length; i++)
{
//if (pers[i] is Chinese)
//{
// ((Chinese)pers[i]).SayHello();
//}
//else if (pers[i] is Japanese)
//{
// ((Japanese)pers[i]).SayHello();
//}
//else if (pers[i] is Korea)
//{
// ((Korea)pers[i]).SayHello();
//}
//else
//{
// ((American)pers[i]).SayHello();
//}
pers[i].SayHello();
}
Console.ReadKey();
}
}
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Person(string name)
{
this.Name = name;
}
public virtual void SayHello()
{
Console.WriteLine("我是人类");
}
}
public class Chinese : Person
{
public Chinese(string name)
: base(name)
{
}
public override void SayHello()
{
Console.WriteLine("我是中国人,我叫{0}", this.Name);
}
}
public class Japanese : Person
{
public Japanese(string name)
: base(name)
{ }
public override void SayHello()
{
Console.WriteLine("我是脚盆国人,我叫{0}", this.Name);
}
}
2.抽象类(父类的方法不写内容,父类名和父类方法前都➕abstract,子类方法名前➕override)
static void Main(string[] args)
{
//狗狗会叫 猫咪会叫
Animal a = new Cat();//new Dog();
a.Bark();
Console.ReadKey();
}
public abstract class Animal
{
public abstract void Bark();
}
public class Dog : Animal
{
public override void Bark()
{
Console.WriteLine("狗狗旺旺的叫");
}
}
public class Cat : Animal
{
public override void Bark()
{
Console.WriteLine("猫咪喵喵的叫");
}
}
3.接口(想继承多个类)
接口名前+interface
接口的方法不允许添加权限,默认public;不能有方法内容(类默认是private);不能有字段
接口只能有方法、属性
不能创建接口对象(可以创建子类对象调用父类接口内容)
接口不能继承类,只能继承接口
static void Main(string[] args)
{
//显示实现接口就是为了解决方法的重名问题
IFlyable fly = new Bird();
fly.Fly();
Bird bird = new Bird();
bird.Fly();
Console.ReadKey();
}
}
public class Bird : IFlyable
{
public void Fly()
{
Console.WriteLine("鸟飞会");
}
/// <summary>
/// 显示实现接口
/// </summary>
void IFlyable.Fly()
{
Console.WriteLine("我是接口的飞");
}
}
public interface IFlyable
{
void Fly();//不允许加权限默认为public(类默认private)
}