湖畔花翎 2016-07-04 01:38 采纳率: 0%
浏览 3041

子类覆盖了父类中的同名方法,父类引用调用子类中覆盖了父类中同名方法,为什么会调用父类中的同名方法

子类覆盖了父类中的同名方法,父类引用调用子类中覆盖了父类中同名方法,为什么会调用父类中的同名方法
public abstract class Beverage{
String description = "Unknow Beverage";
public String getDescription(){
return "Unknow Beverage";
}
public abstract double cost();
}

public abstract class CondimentDecorator extends Beverage{
public abstract String getDescription();
}

public class Espresso extends Beverage{
public Espresso(){
description = "Espresso";
}
public double cost(){
return 1.99;
}
}

public class HouseBlend extends Beverage{
public HouseBlend(){
description = "House Blend Coffee";
}
public double cost(){
return 1;
}
}

public class DarkRoast extends Beverage{
public DarkRoast(){
description = "Dark Roast Coffee";
}
public double cost(){
return 1.2;
}
}

public class Mocha extends CondimentDecorator{
Beverage beverage;
public Mocha(Beverage beverage){
this.beverage = beverage;
}
public String getDescription{
return beverage.getDescription+",Mocha";
}
public double cost(){
return 0.2+beverage.cost();
}
}

public class Whip extends CondimentDecorator{
Beverage beverage;
public Whip(Beverage beverage){
this.beverage = beverage;
}
public String getDescription{
return beverage.getDescription+",Whip";
}
public double cost(){
return 0.9+beverage.cost();
}
}

public class StarbuzzCoffee{
public static void main(String args[]){
Beverage beverage =new Espresso();
System.out.println(beverage.getDescription()+"$"+beverage.cost());
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription()+"$"+beverage2.cost());
}
}

调用getDescription()的时候为什么只显示,抽象类中的Unkunw Beverage???为什么没有被装饰??我很奇怪

  • 写回答

2条回答 默认 最新

  • willkinson 2016-07-04 02:05
    关注

    呵呵,你的基类Beverage的getDescription()方法是写死的返回Unkunw Beverage,又不是返回了属性description的值,所以直接继承Beverage的Espresso和DarkRoast的getDescription()方法理所当然返回Unkunw Beverage,无论description属性的值是什么,至于CondimentDecorator类虽然覆盖了getDescription()方法,但是还有用了DarkRoast作为第一个传进来的Beverage类,所以还是显示了Unkunw Beverage,只不过最后多了点后缀而已

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办