本人也是参考网上列子。运行起来有点问题,重新理解并实践过。以下代码是在控制台编写,是可运行的。

需求:公司有两个人分别写了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类得到想要的动物类的结果。在重写基类方法时,
不会出现新人声明类方法和你方法名称不统一的情况(重写方法名时,方法名称不对会无法编译的)



posted on 2018-01-28 23:29  来去无风  阅读(172)  评论(0编辑  收藏  举报