public abstract class Beverage{
String description="Unknown Beverage"; public String getDescription(){
return description;
} 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 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 CoffeeShop{
public static void main(String args[]){
beverage beverage=new Espresso();
beverage=new Mocha(beverage);
System.out.println(beverage.getDescription()+"$"+beverage.cost());
}
}
现在有这样5个类,我想知道CoffeeShop执行的时候,整个过程是什么样子的?
还有Mocha类的
public Mocha(Beverage beverage){
this.beverage=beverage;
}是做什么的?
this.beverage=beverage;是什么意思?
String description="Unknown Beverage"; public String getDescription(){
return description;
} 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 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 CoffeeShop{
public static void main(String args[]){
beverage beverage=new Espresso();
beverage=new Mocha(beverage);
System.out.println(beverage.getDescription()+"$"+beverage.cost());
}
}
现在有这样5个类,我想知道CoffeeShop执行的时候,整个过程是什么样子的?
还有Mocha类的
public Mocha(Beverage beverage){
this.beverage=beverage;
}是做什么的?
this.beverage=beverage;是什么意思?
this.beverage=beverage;
} 这个是Mocha的构造方法,传入类型为Beverage的参数beverage,作用是将这个参数beverage赋值到Mocha类型的成员变量beverage中
this.beverage指的是Mocha中的成员beverage,而等号后面的beverage是传入的参数
了解了,谢谢啊
麻烦能告诉我CoffeeShop执行的时候,整个过程是什么样子的?
beverage beverage=new Espresso();
beverage=new Mocha(beverage);
System.out.println(beverage.getDescription()+"$"+beverage.cost());
}
你确认代码没错吗??
第二行,第一个单词应该大写吧。。
我给解释一下吧,第二行是父类声明,子类填充。。beverage只是一个引用
第三行是:是把引用丢到Mocha这个类里面,他那个类里面有一个构造函数,其中的参数就是Beverage类型的。
Mocha的基类(也就是父类)是CondimentDecorator,而CondimentDecorator的基类是Beverage,所以可以用该对象做声明。
随后方法是动态绑定的,程序在运行时会自动去找相应的对象,此时的对象是Mocha,所以调用的是它的方法