【发布时间】:2011-07-27 13:30:41
【问题描述】:
可能重复:Why my Virtual method is not overriden?
我一直在研究 Head First 设计模式。顺便说一句,我开始这本书是作为 Code Complete 2 的先决条件。无论如何,我正在使用装饰器模式 (the chapter can actually even be read online).
所以,我有 4 个课程:
- 饮料类 - 摘要
- Espresso 类 - 继承饮料
- BeverageDecorator 类 - 抽象
- 摩卡类-继承饮料装饰
这是 1、3、4 类的源代码。
饮料类:
public abstract class Beverage
{
public Beverage()
{
Description = "Unknown Beverage";
}
public String getDescription()
{
return Description;
}
public abstract double cost();
public String Description { get; set; }
}
BeverageDecorator 类:
public abstract class BeverageDecorator : Beverage
{
public new abstract String getDescription();
}
摩卡类:
public class Mocha : BeverageDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
}
public override string getDescription()
{
return beverage.Description + ", Mocha";
}
public override double cost()
{
return beverage.cost() + .20;
}
}
所以他们非常直截了当。然后,当我将此代码放入 Main() 方法时,我不断收到“未知饮料”的描述。
static void Main(string[] args)
{
Beverage beverage = new Espresso();
beverage = new Mocha(beverage);
Console.WriteLine(beverage.Description +
" $" + beverage.cost());
Console.Read();
}
Mocha 从它继承的类 - Beverage Decorator - 到上面的类 - Beverage Class。即使我在 Beverage Decorator 中有方法并且我覆盖了它。为什么会这样?我知道这与抽象类有关,但我似乎无法弄清楚。
【问题讨论】: