学习c#也有一段时间了,也了解了很多C#中的编程方法,那么现在我们回头来辨析一下抽象方法、虚方法和接口的异同点,以及怎么使用这几种方法。
其实以上三种方法都是多态的一种表现形式,都是对对象的不同表现
虚方法
关键字:virtual
结构:
public virtual void Show()//虚方法
{
Console.WriteLine("我是人别害怕");
}
目的:只有父类中的方法变成虚方法,子类才可以重写这个方法,不然不可以
好处:子类可以有和父类不一样的方法和属性,在父类的基础之上进行更改
抽象方法
关键字:abstract
注意事项:
1、抽象方法必须放在抽象类中
2、抽象方法没有方法体
3、抽象方法不能实例化
4、如果父类是抽象类,子类继承了父类,必须把抽象类中的全部抽象方法重写
举例:
public abstract class Animal//同样也用public
{
//public Person(string name,char gender,int age)
//{
// this._name = name;
// this._gender = gender;
// this._age = age;
//}
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 abstract void Shout();
}
public class Pig:Animal
{
public override void Shout()
{
Console.WriteLine("哼哼叫");
}
}
接口
本人的理解:与类类似,是指一个类要实现的某项功能
关键字:Interface
准则:
1、接口的名称通常以“I”开头
2、必须实现接口
3、不能直接实例化接口
4、接口没有方法体
5、如果一个类即继承了类又实现了接口,那么类必须写在前面,接口写在后面,用逗号隔开
6、一个类只能继承一个父类,但可以实现多个接口。例如:一个小孩儿只有一个父亲,但是他可以有很多本领
举例:
接口:
interface IFly
{
//接口指一种规范
void IFly();
}
主程序:
public abstract class Person//同样也用public
{
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 class Teacher:Person,IFly
{
public void Say()
{
Console.WriteLine("hellow,我是老师");
}
public void IFly()
{
Console.WriteLine("我也会飞");
}
}
public class Student:IFly //实现
{
public void SayHello()
{
Console.WriteLine("我是学生");
}
public void IFly()
{
Console.WriteLine("我会飞");
}
}
这个接口一般和类一起使用,那么问题来了,它和类到底是什么关系呢?其实我们可以这样来理解:把类比喻成一个小孩儿,把接口比喻成说、笑、哭、闹,小孩儿都可以说,笑,哭,闹,这些都是小孩儿具备的本领,所以类同样如此,它的这些本领是通过接口来实现的,接口来帮助类更加的规范化,功能更加的完善。
辨析类和接口
不同点:
1、接口不能实例化,类可以
2、接口不包含方法体,类包含
3、接口可以多继承,类只能单继承
4、类可以在不同的源文件之间进行拆分,而接口不可以
相同点:
1、接口、类、结构都可以从多个接口继承
2、继承接口的任何非抽象类型都必须实现接口的所有成员
3、接口和类都可以包含事件、索引器、方法和属性
继承关系
类之间不支持多继承,接口之间支持,正如一个小孩儿只能有一个爹,可以有多项本领
不知道大家有没有被这几种方法所迷惑,这几种方法确实容易混淆,但是功夫不负有心人,只要我们努力的去学,去探索,我们一定可以得到我们想要的东西的,fighting!,Let’s go!!