【发布时间】:2016-02-04 14:04:23
【问题描述】:
为什么brink2.getDescription() 是Unkown Beverage 而brink3.getDescription() 是House Blend Coffe,
但brink2.cost()和brink3.cost()是1,09
为什么多态不起作用? 我的意思是为什么不叫drink2.getDescription() "return this.beverage.getDescription() + ", Mocha";"
我想得到: 饮料2.getDescription() 和饮料3.getDescription() 一样的结果
class Program
{
static void Main(string[] args)
{
Beverage beverage2 = new HouseBlend();
beverage2 = new Mocha(beverage2);
Console.WriteLine(beverage2.getDescription() + " $" + beverage2.cost());
var beverage3 = new Mocha(new HouseBlend());
Console.WriteLine(beverage3.getDescription() + " $" + beverage3.cost());
Console.ReadKey();
}
}
public abstract class Beverage
{
public string description = "Unkown Beverage";
public string getDescription()
{
return description;
}
public abstract double cost();
}
public abstract class CondomenentDecorator : Beverage
{
public abstract string getDescription();
}
public class HouseBlend : Beverage
{
public HouseBlend()
{
description = "House Blend Coffe";
}
public override double cost()
{
return .89;
}
}
public class Mocha : CondomenentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
this.beverage.description = beverage.description;
}
public override string getDescription()
{
return this.beverage.getDescription() + ", Mocha";
}
public override double cost()
{
return .20 + beverage.cost();
}
}
【问题讨论】:
-
多态性正在工作,但你的类层次结构有点倒退。您应该在基类中有抽象的 getDescription,而不是(重新)在层次结构中进一步引入它。