namespace OODemo { class Program { static void Main(string[] args) { //接口类型的变量,要以实现了该接口的类的对象赋值,以哪个接口声明的变量,只能调用本接口上声明的成员。 IWeapon t = new Tank(); t.Fire(); t.Play(); //不能调用IWheicle上定义的成员 //t.Run(); IWheicle r = new Tank(); r.Run(); r.Play(); //这个不能调用 //r.Fire(); } } } namespace OODemo { //接口是纯抽像类,不能有任何实例成员,接口的成员是方法的声明 public interface IWeapon { //接口成员天生就是public,所以加public关键字就会报错 void Fire(); void Play(); } public interface IWheicle { void Run(); void Play(); } //实现接口的类必须实现接口成员 public class Gun : IWeapon { public void Fire() { throw new NotImplementedException(); } public void Play() { throw new NotImplementedException(); } } public class Sowrd : IWeapon { public void Fire() { throw new NotImplementedException(); } public void Play() { throw new NotImplementedException(); } } public class Tank : IWeapon, IWheicle { public void Fire() { Console.WriteLine("亚瑟,程咬金"); }
//对于两个接口都定义了的成员,要显式的实现就是加接口名前缀(接口点出来方法名来)。 void IWeapon.Play() { Console.WriteLine("鸣礼炮"); } public void Run() { Console.WriteLine("穿山越岭"); } void IWheicle.Play() { Console.WriteLine("脚踏车"); } } }
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可
继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承实体类,
但前提是实体类必须有明确的构造函数。
1.接口可以实现多态,能降低类与类之间的耦合度,接口和抽象类一样具有稳定性不能轻易改变。
2.接口是纯抽像类,不能有任何实例成员,接口的成员是方法的声明,
实现接口的类必须实现接口成员,接口成员天生就是public所以加public关键字就会报错。
3.接口类型的变量,要以实现了这个接口的类的对象赋值,只能调用本接口上声明的成员,
对于两个接口都定义了的成员,要显式的实现就是接口点出来方法名来。