本人也是参考网上列子。运行起来有点问题,重新理解并实践过。以下代码是在控制台编写,是可运行的。
需求:公司有两个人分别写了2个动物吃什么(可通过写两个动物类实现需求)
//新建Dog类
public class Dog
{
public void likeFood()
{
Console.WriteLine("喜欢吃肉");
}
}
//新建Cat类
public class Cat
{
public void likeFood()
{
Console.WriteLine("喜欢吃鱼");
}
}
//动物园类
public class Zoo {
public void show(Dog dog){
dog.likeFood();
}
public void show(Cat cat){
cat.likeFood();
}
}
//控制台输出:
//喜欢吃肉
//喜欢吃鱼
Zoo zoo = new Zoo();
zoo.show(new Dog()); //喜欢吃肉
zoo.show(new Cat()); //喜欢吃鱼
需求发生变化时,需要多添加猴子喜欢吃什么的(按照简单理解,我们可以通过添加MonKey类添加likeFood()方法,并在zoo类中实例化MonKey类得到猴子喜欢吃什么
,然后得到猴子喜欢吃什么。需要修改3个地方就过于有点繁琐。这里就可用到继承和多态)
//新建基类(父类)
public class Animal
{
public virtual void likeFood()//声明个虚方法
{
Console.WriteLine("我是基类");
}
}
//新建Dog类
public class Dog:Animal
{
public override void likeFood()//重写基类likeFood()方法
{
Console.WriteLine("喜欢吃鱼");
}
}
//新建Cat类
public class Cat:Animal
{
public override void likeFood()//重写基类likeFood()方法
{
Console.WriteLine("喜欢吃鱼");
}
}
//新建Monkey类
public class Cat:Animal
{
public override void likeFood()//重写基类likeFood()方法
{
Console.WriteLine("喜欢吃香蕉");
}
}
//动物园类
public class Zoo {
public void show(Animal animal){
animal.likeFood();
}
}
//控制台输出:
//喜欢吃肉
//喜欢吃鱼
//喜欢吃香蕉
Zoo zoo = new Zoo();
zoo.show(new Dog()); //喜欢吃肉
zoo.show(new Cat()); //喜欢吃鱼
zoo.show(new Monkey());//喜欢吃香蕉
这种类似的需求再发生时,就不需要修改zoo类里内容了。只需新建个继承Animal类的派生类。就可在控制台直接实例化zoo类得到想要的动物类的结果。在重写基类方法时,
不会出现新人声明类方法和你方法名称不统一的情况(重写方法名时,方法名称不对会无法编译的)
浙公网安备 33010602011771号