colorprinter
不停止是的cp
實例當您使用轉換運算符就可以了,所以其實施的public void drucke()
不會改變
什麼你與你的(p)colorprinter
鑄造表達是什麼樣的您期望對象colorprinter
滿足的合同(接口),其中包括具有簽名public void drucke()
的公共方法,但不包括任何特定的實現。
而且,順便說一句,這鑄件已隱式執行在聲明的類型p
的drucker
,所以(p)
是p drucker = (p)colorprinter;
多餘的。 p drucker = colorprinter;
就足夠了。
Here you can learn more about typecasting。
請記住,最好的做法是從抽象類或接口進行擴展,並且只實現抽象方法。你的代碼更好的設計將是:
abstract class BasePrinter {
public void druckauftrag() {
// ...
drucke();
}
public void drucke();
}
class p extends BasePrinter {
public void drucke() {
System.out.println("B/W-Printer");
}
}
class cp extends BasePrinter {
public void drucke() {
System.out.println("Color-Printer");
}
}
但當然約束並不總是允許這種重新設計。通過基部要求參數的構造函數(dependency injection),而不是延伸的基類的也可以是一個很好的選擇:
interface Druckable {
void drucke();
}
class Druckauftrager {
Druckable dk;
Druckauftrager(Drukable dk){
this.dk = dk;
}
public void druckauftrag() {
// ...
dk.drucke();
}
}
class p implements Druckable {
public void drucke() {
System.out.println("B/W-Printer");
}
}
class cp implements Druckable {
public void drucke() {
System.out.println("Color-Printer");
}
}
現在,如果你想表達的是一臺打印機需要或可以有多種打印功能(像彩色和b/W),你只寫儘可能多的額外Drukable性質和構造函數的參數類,只要你想,例如:
class BlackAndWhiteOrColorPrinter {
p blackAndWhitePrintService;
cp colorPrintService;
Druckable selectedPrintService;
BlackAndWhiteOrColorPrinter (p blackAndWhitePrintService, cp colorPrintService){
this.blackAndWhitePrintService = blackAndWhitePrintService;
this.colorPrintService = colorPrintService;
this.selectedPrintService = blackAndWhitePrintService;
}
public void druckauftrag() {
// ...
selectedPrintService.drucke();
}
}
這樣,你甚至可以寫一個class MultiPrinter
與MultiPrinter(List<Druckable> printServices)
構造並將任意數量的打印模式添加到其打印服務列表中:p
,cp
,以及其它實施Druckable
其public void drucke()
自帶的未來。這也是額外的實際的,如果你想介紹的單元測試,這樣可以提供迫使你要測試,像druke()
扔PaperJamException
,例如特定條件樣機的對象。
欲瞭解更多有關如何接口,覆蓋和繼承工作,看到https://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html
BTW,acording官方java code conventions guide的最新版本,並也被事實上的標準,在Java類應該使用CamelCase命名約定。您也可以極大地從使用semanting命名上所有的定義,像BlackAndWhitePrinter blackAndWhitePrinter
和ColorPrinter colorPrinter
受益。
有點挑剔:爲了清晰起見,用大寫字母命名您的類。 –
永遠不要用你的非英語母語,命名類,mehtods等使用英語駝峯時。 –
類的類型是一個定義如何通過'外部用戶'(其他類)看到一個對象。方法實現綁定到一個實例,類型只定義它的外部聯合。 – topr