タイトルでほぼ完結してしまっているのですが、Javaでプログラミングをしていて2つのクラスにpublic修飾子をつけるとIDE上で新しく〇〇.javaというファイルを作りなさい、というような内容をあらわす注意が出てきます。
他のファイルからそのクラスにアクセスしやすくするためにpublicをつけるならファイルごとにしなさい、ということでしょうか?
なんとなくそいうものかな、と思ったのですがちゃんとした解が欲しいと思ったので質問させていただきました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
Javaという言語の仕様を理解するときに、
- 企業が言語を開発していて(旧Sun、現Oracleが開発元)
- 企業が言語を利用している(SIerの大定番)
- 大規模開発向けの言語(エンタープライズなど)
という特徴を押さえるだけで、かなり分かりやすくなります。
一言で言うと、スーツ寄りのネクタイを締める言語です。
(個人的にはノーネクタイのLLの方が好みですが)
規格を統一するのは大規模になるほど強力です。
たとえ冗長でも、属人性を低めて、人間の可読性を高めるのがひとつ。
10行単位で考えると、「ファイル分けるの面倒」とかあるでしょうが、
10万行が9万行になっても11万行になっても、全体では大差ないんです。
それよりなるべく、10万行から10行を探さない方が効率が良いんです。
「100回に1回くらいは1ファイルに2クラス入ってる」みたいな例外があると、
人間は盲点に気付きにくいので、100倍の時間が掛かったりするんです。
もうひとつは、機械にとっても読みやすくなります。
Javaは静的言語なので、コンパイルが必要です。
静的型付けが早いという理屈の応用で、コンパイラ側から見ると、
(publicの)1クラス1ファイルみたいな、制約が多いほどコンパイルが早い。
ここで、大規模開発だとソース量が多いので、コンパイルに時間が掛かります。
約20年前(95年)からありますが、一般的に昔はコンパイルの時間が遅かったんです。
大規模だと1回何時間掛かるとかあったようです。「コーヒータイム」と言ったり。
だから、1クラス1ファイルも、少しでも早くする工夫のひとつなんでしょう。
逆にRubyとかLLがどうして遅いかというと、実行時に調べることが多いからです。
そのかわり、読み書きしやすくなり、小規模だと快適で個人的には好みですが。
投稿2017/11/14 20:17
総合スコア5592
0
ベストアンサー
同じJVM言語でもKotlinやScalaなどはpublicのクラスを一つのファイルへ置けますので、これは単にJavaの言語仕様で「そう決められているから」としか自分には言えません。
Java設計者はなぜそういうポリシーにしたのでしょうね。
https://stackoverflow.com/questions/3578490/why-only-1-public-class-in-java-file
これなどを見ると「publicクラスをそれぞれ独立したソースファイルとすること=優れたデザインプラクティス」とJava設計者が考え、それを単なる習慣ではなく言語仕様として強制するほど重要と考えたのかなぁというふうに思いました。前述したKotlinやScalaはそれに反対の立場を採っているので「Javaの選択が優れいる」とも「優れていない」とも自分には言えませんが、少なくともJavaの後発の言語がそれを採用していないということは誰もが認めるデザインプラクティスではなかったのかも知れません。
投稿2017/11/14 17:29
総合スコア18404
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
実際大規模なプログラムになればなるほど、一つのjavaファイルには一つのクラスのみあったほうがわかりやすくなると思います。
そもそも〇〇.javaというファイルの中に、public class △△というクラスがあったときに、どのように他のクラスから参照すればよいのでしょうか。。
それにそのケースだと△△.javaというファイル名でも許しちゃうのでしょうか?(ファイル名はpublicクラス名と同じである制約があるため
また、確か同じ〇〇.javaファイルの中にpublic class 〇〇、public class △△を作った場合、メインメソッドはpublicクラスの中に記述することというルールがありますが、どちらのクラスのメインメソッドから実行すればいいかわからなくなるのでエラーになる、と聞いたことがあるような気がします。
何分あいまいな記憶ですので、嘘言っていたらすいません。。
投稿2017/11/15 01:19
総合スコア74
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/15 01:39

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/17 01:46