我有以下关于野生动物园的代码:
public class Bird
{
public void virtual Exercise()
{
some logic here
}
public void virtual Feed()
{
Exercise();
some logic here
}
}
public class Penguin : Bird
{
public void override Exercise()
{
base.Exercise();
some logic here
}
public void override Feed()
{
Exercise();
base.Feed();
some logic here
}
}
Run Code Online (Sandbox Code Playgroud)
所以每次喂鸟都必须运用它.然而,一只鸟可以在没有喂食的情况下锻炼.
企鹅是一种特殊类型的鸟类,需要进行鸟类锻炼和一些特定的企鹅锻炼.喂养企鹅需要喂鸟以及一些额外的企鹅需求.
我在这里使用此代码的问题是,当Feed被调用时,它会进行两次鸟类练习.企鹅会变得非常疲惫.
我怎样才能改进代码,这样当企鹅被喂食时,它们只会在每次喂食时为鸟类和企鹅运动一次?
只需从Penguin.Feed()调用中删除Exercise()即可.因为,正如您所说,当您调用base.Feed()时,将调用Exercise(),因此这样做是多余的.并且base.Feed()调用将调用Penguin版本的Exercise(),因此您将获得该鸟的正确练习.
(从问题中移除后删除了对哺乳动物的引用)