public class Cat : Pet,ICatchMice,IClimbTree
{
public Cat(string name):base(name) //构造函数
{
}
public override void Speak() //override 重写
{
Console.WriteLine(_name + " is speaking:" + "喵喵");
}
public void catchmice() //实现接口成员,既要声明且加上public 又要加上函数体
{
Console.WriteLine(_name + " had caught a mice!");
}
public void climbtree()
{
Console.WriteLine(_name + " is climbing a big tree!");
}
}
class Program
{
static void Main(string[] args)
{
//用基类类型的引用,可以方便不同子类的统一管理 ,例如利用一个容器(数组)保存所有的子类
Pet[] pets = new Pet[] { new Dog("喵喵"),new Cat("汪汪"),new Taidi("小三") };
for (int i=0;i<pets.Length;++i)
{
pets[i].Speak();
}
Cat c = new Cat("Tom");
//ICatchMice catchM = (ICatchMice)c;
//catchM.catchmice();
c.catchmice();
c.climbtree();
Console.ReadLine();
}
}
强制转换属于显示接口,而一般用隐式接口
当类实现多个接口时,并且接口中包含相同的方法签名,可以标识出哪个方法属于哪个接口
可以去看看Gof的书。。。
就是为了降低耦合度,提高你代码的扩展性,这就是为什么采用接口。
把猫C强制转换成接口类型的优点是让你的代码提高了扩展性啊,你可以是猫,狗,蜥蜴等等。如果你用Cat,那你只能是猫了。明白没。。。
如果想让狗爬树,可以调用Climbtree接口,是需要重写一次爬树函数的。
\\△石'必忍\九d△/次◇情事_,o∨二心入启九o❤️丫条,\
面向对象的基本原则:依赖倒转原则,程序设计应该依赖抽象,而不依赖具体