次のクラス階層を検討してください。
Abstract class Printer{
public print(){
//code to handle printing
}
}
class LaserPrinter extends Printer{
private $file;
public setFile($file){
$this->file = $file;
}
}
class InkJetPrinter extends Printer{
private $document;
public setDocument($document){
$this->document= $document;
}
}
class ClientClass{
private $filesToPrint=array();
public __construct(InkJetPrinter $inkJetPrinter, LaserPrinter $laserPrinter){ //I was hoping to apply Dependency Inversion here by defining both inputs as type Printer instead
//constructor stuff
}
public function startPrinting(){
//some logic to extract the $files and $documents from $this->filesToPrint
//...
$this->inkJetPrinter->setDocument($document);//<---Things got messy here
$this->laserPrinter->setFile($file);//<---and here too
//...
}
}
にはメソッドがないため、クラスLaserPrinter
を親に置き換えることはできません。
それは、彼のヒエラルキーがリスコフの代用原理を破っているということですか? サブクラスが独自のパブリック メソッドを持つことは許可されていませんか?Printer
Printer
setFile