6

Java では、すべての (外部) クラスが個別のファイルにコーディングされることになっているため、インポートは (外部) クラスに関連付けられます。したがって、クラス定義の前のディレクティブがクラスに関連付けられていると主張することができimport ...;ます (注釈と同様です)。

ここで、親クラスのインポートを継承できれば、ソース ファイルの乱雑さが大幅に削減されます。なぜこれが不可能なのですか?つまり、なぜ Java コンパイラは基本クラスのインポートも考慮しないのでしょうか?

ノート:

  • おそらく複数の答えがあります。
  • Eclipseにインポートを整理させれば、これは大した問題ではないことはわかっています。それについて言及する必要はありません。これは「方法」ではなく「理由」に関するものです (a-la- this )。
4

3 に答える 3

10

まず、すべてのクラスを個別のファイルにコーディングする必要はありませんが、すべてのパブリックなトップレベルクラスをコーディングする必要があることに注意してください。いいえ、インポートは実際にはどのクラスにも関連付けられていません。それらは、使用できるようにファイル内に特定の外部クラス/パッケージを含めるために使用される単なるステートメントです。実際、実際に何かをインポートする必要はありません。いつでも完全な名前を使用できます。つまり、次のようになります。

java.util.List<String> list = new java.util.ArrayList<String>();

インポートは利便性のためにあります (そしてコンパイラのためだけです - クラスがコンパイルされた後に失われます)、それをすべて書き出す必要がなくなり、代わりにList<String> list = new ArrayList<String>(から関連するインポートを行った後にjava.util) 書くだけにする必要があります。したがって、サブクラスがインポートを「継承」する理由はありません。

于 2012-12-28T19:52:24.873 に答える
2

インポートはシンタックス シュガーであり、それ以上のものではありません。本当に望むなら、インポート文を使わずに Java プログラムを書くことができます。たとえば、次のクラスはすべて単独でコンパイルします。

class Foo {
  java.util.List<String> list = new java.util.ArrayList<String>();
}

さらに、インポートを継承すると、クラスからインポートを削除することが非常に難しくなります。たとえば、 がBar.javaから継承されている場合、インポートをに追加しないと、Foo.javaからインポートを削除できない場合があります。インポートを明示的にすることを強制すると、他のファイルへの影響を心配することなく、単一のファイルを変更することが非常に簡単になります。これは、Java およびオブジェクト指向プログラミング全般のほとんどの基本原則です。FooBar

(この最後のポイントは、特にこの分野での C および C++ の問題を回避しようとしていたGo の設計における重要な要素であった問題に関連しています。)

于 2012-12-28T21:17:58.653 に答える
1

各ファイルにそのインポートを明示的に指定すると、読みやすさが向上します。インポートが別のファイルから継承されているため、ファイルを開いて依存関係を一目で確認できないことを想像してみてください。

于 2012-12-28T21:24:15.237 に答える