菜鸟学习之旅——多态
多态这个词之前就有人听说过,当时自己很好奇,多态到底是什么,直到今天终于明白了,其实多态就是对象可以表现多个类型的能力,例如:一条狗,它不仅可以帮人们看家护院,还可以陪伴人们,这条狗最起码有这两个功能,这就是多态的一种表现形式,其实现实生活中,很多事物都有多态的特性!下面就让我们来了解一下c#中多态的具体表现形式
在C#中如何实现多态
实现多态可以有两种不同的方法,一种是通过父类方法的重写,另一种是抽象方法和抽象类,下面我们依次来学习一下这两种方法
方法的重写
1、子类与父类方法名相同的方法
举例:
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
public void Show()//虚方法
{
Console.WriteLine("我是人别害怕");
}
}
public class Teacher : Person
{
public void Show()//重写父类中的方法,但是不影响运行
{
Console.WriteLine("我是老师,别害怕");
}
}
当我们写完之后我们会发现子类的show方法下面会出现绿线,这是因为我们有一些地方写的不合理,并不意味着程序不能运行。解决办法有以下两种
a、在子类的方法名前加new,加new的意思就是隐藏基类方法
b、在父类的修饰符后面写virtual,在子类的修饰符后面写override
2、子类重写父类方法
前提:父类的方法必须是虚方法
子类可以重写父类的方法,也可以调用基类方法
这个时候就会涉及到什么是虚方法
在c#中在修饰符后面加上virtual的方法就是虚方法
public virtual void Show()//虚方法
{
Console.WriteLine("我是人别害怕");
}
注意:
1、虚方法不能用static来修饰
2、virtual不能与private一起使用
抽象方法和抽象类
什么是抽象方法:下面这句代码就是一个抽象方法
public abstract void Shout();
什么是抽象类:以下这段代码就是抽象类
public abstract class Animal
{
public Animal(string name)
{
this._name =Name;
}
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public abstract void Shout();
}
使用抽象方法必须注意以下几点:
1、抽象方法使用abstract来修饰
2、抽象方法没有方法体
3、抽象方法必须在抽象类中
4、抽象类无法实例化
5、父类是抽象类,子类继承了这个类,必须把抽象类中的方法重写
6、子类必须全部重写父类中的抽象方法
举例:
public abstract class Animal
{
public Animal(string name)
{
this._name =Name;
}
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public abstract void Shout();
}
public class Pig:Animal
{
public Pig(string name):base(name)
{ }
public override void Shout()
{
Console.WriteLine("{0}哼哼",this.Name);
}
}
看了抽象方法之后是不是有点和虚方法有点混淆,下面让我们来辨析以下这两种方法的区别
以上这些就是我对多态的理解以及抽象方法和虚方法的理解,有什么地方写的不对,请多多指教
我相信越努力的人越幸运,让我们一起努力吧!