質問

System.out.printlnの意味がよくわかりません。

色々と参考書などを読むと、「Systemのフィールド変数outは、PrintStreamクラスのインスタンスを参照している。」との記述がありました。
ならばと、直接io パッケージからPrintStream 、outを呼び出すため、
“java.io.PrintStream.out. println();”と書きましたが、「outが不可視です」とのエラーが出ます。
このコマンドのどこが間違っているのでしょうか。

また、何故、Systemから、他のパッケージにあるメソッドを呼び出すのでしょうか。
わざわざSystemから、ioパッケージにあるout 、println() を呼び出す必要があるのでしょうか。
他の呼び出し方はないのでしょうか。;

通報する

回答 (4件)

まずAPIを読めば書いてありますが、PrintStreamのフィールドのoutはアクセス修飾子がprotectedです。

つまりPrintStreamを継承したクラスからしかアクセスできません。
そのためPrintStream.outと記述してもoutが見ることができないと怒られます。

また、System.outが参照しているのはPrintStreamのインスタンスでSystem.out.println()というのはPrintStreamnクラスのprintln()というメソッドを呼び出しています。

上のような記述だとPrintStreamクラスのフィールドのoutが参照しているインスタンスのprintln()メソッドを呼び出すという意味になります。

しかしながらPrintStreamクラスのフィールドのoutはOutputStreamクラスのインスタンスを参照しています。
このOutputStreamクラスにはprintln()メソッドは定義されていません。
したがってoutが例え可視の状態にあってもprintln()なんてないから呼び出せませんとコンパイラにエラーを出されてしまいます。

二番目の質問に対してですが、恐らくパッケージに対しての認識がちょっと間違っていると思いますので、参考書を読みながらしっかり理解されることをお勧めします。

SystemからPrintStreamのprintlnを呼び出すのは簡単に標準出力を行うためです。
PrintStreamのインスタンスを作ってprintln()を呼び出してという作業を自分でしなくてもSunが準備してくれたものを使えば簡単にできますよということです。
オブジェクト指向には一回作ったものを再利用しようという考え方があります。
よく使う処理を毎回毎回プログラマが作っていたら面倒ですよね?
それを回避するために最初から簡単にできるようなものをSunが作ってくれたってことです。


これらを理解するにはオブジェクト指向やJavaに対する知識がある程度必要なので、とりあえず今はおとなしくSystem.out.println()をつかっておいて、分かるようになってから考えればいいと思います。

頑張ってください。

その疑問を本気で解決するなら、Sunからソースが公開されているので、それを読めば疑問は解けると思いますが。

あなたは「フィールド」「インスタンス」「パッケージ」「メソッド」などをどのように認識しているのでしょうか? そして, 「オブジェクト指向」についてどの程度わかっているのでしょうか?
なんとなく曖昧になっているような気がします. まあ, 私自身も「オブジェクト指向とは何か」と聞かれると答えに困るわけですが....

まずprintln() がStatic な関数であれば呼び出せます。上記のエラーですと、どうやらそうではないようですね。(ドキュメントを確認ください)

この場合、コンソールに対する出力用としてPrintStream が最初から準備(インスタンス化されていて、出力先は標準出力コンソールに設定されている)という訳です。System.out がまさにそれです。

いわゆるStream 系は出力先やら設定を保持する必要があるので、オブジェクトをインスタンス化して使う事を想定しています。そしてSystem.out はデフォルトで用意(つまりJava サイドで勝手にインスタンス化)されているって事です。

あなたが別の出力先(例えばファイルなど)を指定したいのなら、インスタンス化したオブジェクトのprintln() を呼ぶ事になるでしょう。

このQ&Aは役に立ちましたか?6 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

フリーアナウンサー長谷川豊氏の新コーナー「このニュースどう思います?」がスタート!

元フジテレビのフリーアナウンサー長谷川豊氏から気になるニュースについておしトピの皆さんに質問します! 皆さんの意見をもとに長谷川豊氏がコラムを執筆します! アプリリリース記念として最大1万分のアマゾンギフト券プレゼントキャンペーンも実施中!


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ