c#中多态的学习与使用方法以及重写(覆盖)和重载的区别

来源:互联网 发布:留学中介机构 知乎 编辑:程序博客网 时间:2024/05/16 16:22

首先我们用一个抽象方法进入主题
abstract class Animal //抽象类(父类)
{
public string _name;
public string _color;
public int _age;
public abstract void Eat();//抽象方法
//抽象方法 ,让子类去实现该功能
//抽象方法必须被子类重写(override)
//抽象方法只需声明,无需实现,也就是没有方法体。
//定义了抽象方法的类必须是抽象类。
//抽象类中不一定全是抽象方法 可以有一部分具体实现
//抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类
}
class Dog:Animal //子类
{
public override void Eat()//方法的重写(覆盖)
{
Console.WriteLine(“狗狗吃骨头”);
}
}

static void Main(string[] args)
{
Dog dog = new Dog();
dog.Eat();
dog.Move(1,1);
//抽象类不能被直接实例化,只有它的非抽象子类可以创建对象
Animal animal = new Dog();
//animal.Eat();//多态
Master master = new Master();

master.Feed(new Dog());
/*
提高程序的扩展性
多态(polymorphism)即一个名字具有多种语义。在面向对象中指一个方法可以有多种实现版本。类的多态表现为方法的多态,方法的多态主要有重载(overload)和覆盖(override)。
重载是同一个类中,有多个方法同名,但是参数列表不同
abstract class Animal
{
public void Move(int x)
{
Console.WriteLine(“左右移动”);
}
public void Move(int x,int y)
{
Console.WriteLine(“左右和前后移动”);
}
}

参数列表不同:
1.参数的个数不相同
2.参数的类型不同
3.参数的次序不同
注意:返回值类型不同无法确定重载
覆盖是子类中定义了父类同名方法,且参数列表和返回值相同
1.父子类内部
2.父类的方法virtual修饰一下 形成虚方法
或者为抽象方法:abstract修饰
3.子类中的方法务必和父类的方法同名
override关键字修饰一下
4.其他的通通一样(访问修饰符 修饰符 返回值类型 参数列表)
*/
}
}