我想實現的裝飾圖案,在這裏我specfication:裝飾模式,編譯器不允許類型傳播
public abstract class Menu{ //propagate the type
}
而且
public class Sandwich extends Menu{ // Concrete class which is a Menu
}
而且
public abstract class Extra extends Menu{
Menu menu;
public Extra(Menu menu){ // the constructor takes a Menu type
this.menu=menu;
}
}
的問題是爲什麼編譯器不允許這樣做:
public class Test {
Menu sand1 = new Sandwich();
sand1 = new Extra(sand1); //It's fine for the compiler
Sandwich sand = new Sandwich();
sand = new Extra (sand);// Compiler cries here !!
}
三明治IS-A Menu
通過inheritence,Extra
的構造函數需要Menu
所以爲什麼編譯器不開心?
編譯器消息:Type mismatch: cannot convert from Extra to Sandwich
感謝您的澄清。
'Extra'不是'Sandwich' ...編譯器說什麼_exactly_? –
@SotiriosDelimanolis我添加了編譯信息 – akuma8
好吧,你去了,我不明白你的困惑。問題在錯誤消息中詳細說明。 –