定义一个类时,通常需要定义一些方法来描述这个类的行为特征,但比如定义动物类时,叫shou()方法针对每个动物不同叫声也不同,因此shou()方法无法准确的描述动物的叫声。当这种情况出现时,C#允许在定义方法时不写方法体,即抽象方法(用abstract关键字定义)
定义抽象类
- 抽象方法的类必为抽象类,但抽象类可以没有抽象方法。
- 抽象类不可以实例化,如想调用抽象类中定义的方法,则需创建子类,在其中实现抽象类的抽象方法。
public abstract void shot()
}
class dog:animal{
public override void shot()
{
c.w("汪汪汪");
}
}
class cat:animal{
public override void shot()
{
c.w(“喵喵喵”);
}
}
Main(){
Dog dog =new Dog();
dog.shot();
Cat cat=new Cat();
cat.shot();
c.k();
}
子类通过override关键字实现了父类animal的抽象方法后,可以正常实例化,并通过实例化对象调用父类的shot()方法。
如果一个抽象类中的所有方法都是抽象方法,这个抽象类定义为接口。
在显示生活中,我们的电脑可以读取U盘,硬盘,和MP3,是因为他们都有一个相同的Read()方法,USB调用Read()方法方法读取。USB接口其实就是一个协议,哪些硬件遵循协议,那么插在主板上这些引发件都快可以读取出数据。
接口
使用interface关键字定义
接口定义一组成员但是不直接实现他们(在接口中定义的成员就跟我们刚刚所提到的协议很相似)
interface animal{
void cat();
void dog();
}
animal即为接口。
cat,dog()方法 无方法体
无访问修饰符
在接口中定义方法:
1.不能添加访问修饰符,访问权限默认都是public(我们就不能添加了,public也不能写,所以我们就直接 返回值 方法名)
2.抽象方法(接口)不能实例化——因此要定义一个子类中定义一个方法输出,在Main()中实例化并调用 实现接口中所有的方法。
3.一个类中可以实现多个接口,被实现的多个接口之间要用逗号隔开。
interface run(){}
interface fly(){}
class bird:run,fly{}
4。一个接口可以继承多个接口,接口之间用逗号隔开
interface run(){}
interface fly(){}
interface bird:run,fly{}