一、接口定义
提供了一组方法声明的统一命名(不提供实现,实现是继承他的类的事)。
二、接口的使用
2.1什么时候使用接口
当你想要用类做多重继承的时候,就要用接口(类不支持多重继承)。
实例1:狗继承动物
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public abstract class Animal
{
public void EatFood()
{
Console.WriteLine("我能吃东西");
}
}
public class Dog : Animal
{
public Dog()
{
Console.WriteLine("我是狗");
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.EatFood();
}
}
}
实例2:特殊的狗(会表演)--接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public abstract class Animal
{
public void EatFood()
{
Console.WriteLine("我能吃东西");
}
}
public class Dog : Animal
{
public Dog()
{
Console.WriteLine("我是狗");
}
}
//定义表演接口
public interface IAnimalShow
{
void Show();
}
//定义导盲接口
public interface IAnimalHelpPeople
{
void Help();
}
//定义特殊狗类(表演)
public class SpecialDog : Animal, IAnimalShow,IAnimalHelpPeople
{
public SpecialDog()
{
Console.WriteLine("我是特殊的狗");
}
隐式接口
public void Show()
{
Console.WriteLine("我会表演");
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.EatFood();
SpecialDog s_dog = new SpecialDog();
s_dog.Show();
s_dog.Help();
}
}
}
2.2显式接口和隐式接口的对比
1.隐式:类和接口都可以访问接口中的方法。显式:接口方法只能通过接口来完成,因此接口方法默认为私有
2.单个接口推荐使用隐式接口
3.实现多个接口推荐用显式接口
实例3:显式接口与隐式接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public abstract class Animal
{
public void EatFood()
{
Console.WriteLine("我能吃东西");
}
}
public class Dog : Animal
{
public Dog()
{
Console.WriteLine("我是狗");
}
}
//定义表演接口
public interface IAnimalShow
{
void Show();
}
//定义能够帮助人类狗的接口
public interface IAnimalHelpPeople
{
void Help();
}
//定义特殊狗类(表演)
public class SpecialDog : Animal, IAnimalShow,IAnimalHelpPeople
{
public SpecialDog()
{
Console.WriteLine("我是特殊的狗");
}
//显式接口
void IAnimalShow.Show()
{
Console.WriteLine("我会表演");
}
void IAnimalHelpPeople.Help()
{
Console.WriteLine("我能帮助人");
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.EatFood();
SpecialDog s_dog = new SpecialDog();
IAnimalShow idogshow = (IAnimalShow)s_dog;
idogshow.Show();
IAnimalHelpPeople idoghelp = (IAnimalHelpPeople)s_dog;
idoghelp.Help();
Console.Read();
}
}
}
三、接口与抽象类
3.1对比
1.定义:抽象类使用,接口使用。他们都不能实例化。
2.抽象类可以包含虚方法,非抽象方法和静态成员。接口只能定义方法,不能实现。
3.抽象类不能够实现多继承,接口可以多继承。
4.抽象类:类实现继承:子类属于基类 is关系(A是B)。类实现接口:CAN-DO关系,即类能够实现这个接口。(A能做B)
参考:http://www.cnblogs.com/zhili/