-1
私はちょうどコンポジションについて学習しています。 Scanner(System.in)は合成の例と考えられますか?Scanner(System.in)はコンポジションの例とみなされます
私はちょうどコンポジションについて学習しています。 Scanner(System.in)は合成の例と考えられますか?Scanner(System.in)はコンポジションの例とみなされます
はい、そうです。
ポイントは、Scanner
は、のデータを読み取ることができる「何か」を持ち、そのデータをトークンに処理する方法を知っています。
"何か"は標準入力、ファイル、文字列などです。これらのそれぞれから読み込むための別個のサブクラスはありません。実際、Scanner
はfinal
であるため、拡張することはできません。あなたはnew Scanner(System.in)
についての興味深い見つけるかもしれない何
がScanner
が直接System.in
のホールドを保持していないということです:あなたはconstructor's source codeを見れば、あなたが表示されます。
public Scanner(InputStream source) {
this(new InputStreamReader(source),
WHITESPACE_PATTERN);
}
private Scanner(Readable source, Pattern pattern) {
// ...
this.source = source;
// ...
}
source
(例えばSystem.in
を)に包まれてInputStreamReader
であり、それはによって保持されるであるです。だから、構図、2つのレベルを持っている:
Scanner
はReadable
(InputStreamReader
)を持っています。InputStreamReader
は、InputStream
(たとえば、System.in
)です。
http://stackoverflow.com/questions/2399544/difference-between-inheritance-and-composition –