12

私は、抽象を除いて、これらすべてが何をするかを知っています。私は現在、中学校レベルの教育と考えているもので自分自身にJavaを教える過程にあります(私の高校は悪い近所にあったので、私は立派になりました)...

しかし、これらのキーワードの使用パターンは正確には何ですか?いつ何を使うの?いつ省略しますか?クラスの前に「public」を付けると、それを使用するすべてのクラスに新しいファイルが必要になります。モノリシックソースファイルを作成する場合は、それを省略できますか?

私が調べたすべての情報は、これらが何をするのかを正確に説明していますが、いつ/なぜ/どこでそれらを使用すべきかを明確に示していません。

よろしくお願いします、アンソニー

4

6 に答える 6

40

ソースは、これらのキーワードがいつ/なぜ/どこで使用されるかを示しているため、これらのキーワードが何を意味するかを示しています。たとえば、私の説明には「いつ」という言葉がありますが、キーワードのセマンティクスに直接従います。

  • private特定のクラスの外で何かが使用されていない場合に使用する必要があります
    • メソッドとフィールドの場合 - それらが同じクラス内でのみ使用される場合
    • クラス用 - 同じクラスで使用される場合、ネストされたクラスのみ
  • protectedときに使用する必要があります
    • メソッドとフィールドの場合 - サブクラスのみがアクセスできるようにする必要がある場合
    • クラスの場合 - ここでもネストされたクラスのみで、サブクラスによってアクセスできます
  • public何かが他のすべてのクラスからアクセスできる場合に使用されます

上記の 3 つが「可視性修飾子」です。一部のメソッド/フィールド/クラスの使用をオブジェクトのグループに制限し、それらを他のオブジェクトから隠したい場合に使用されます。別の可視性修飾子があります - デフォルトのもの (他に存在しない場合)。クラス/メソッド/フィールドに同じパッケージのクラスのみがアクセスできるようにする場合に使用します。

  • staticクラスのインスタンス (つまりオブジェクト) を使用する必要がない場合に使用されます。
    • for fields - グローバル フィールドが必要な場合
    • メソッド用 - オブジェクトの状態に依存しないユーティリティ関数が必要な場合
    • ネストされたクラスの場合 - 囲んでいるクラスのインスタンスなしでそれらにアクセスしたい場合。
  • abstract現在のクラスで実装を提供したくない場合:
    • メソッド上 - サブクラスが実際の実装を提供する必要があるが、このクラスでこれらのメソッドを (実装方法に関係なく) 呼び出したい場合。
    • on classes - クラスが抽象メソッドを持つ可能性があることを示します。
  • final- 何かを変えたくないとき。
    • フィールドで、値を一度だけ割り当てたい場合。ローカル変数を内部クラスに渡したい場合に便利です - final を宣言する必要があります。
    • クラスとメソッド - サブクラスがそれらを拡張/オーバーライドできないようにする場合。
于 2011-02-22T20:08:59.983 に答える
10

初心者向けの経験則は次のとおりです。

  1. パブリック: すべてのクラスはパブリックである必要があります (これは正確ではありませんが、かなり近いです)。方法については、テレビについて考えてみてください。テレビに対して期待することは「公開」です。
  2. 非公開: 実装の詳細は非公開にする必要があります。あなたのテレビについて考えてみてください。テレビと同等のものを非公開にする必要がある場合、機能は非公開です。ユーザーがテレビを永久に台無しにしたり、感電死したりする可能性があるためです。
  3. 保護: 今のところ無視してください。
  4. 要約: Java を学ぶときに読んだ最良の例は、「鳥」について考えることでした。Bird は抽象的であるため、「抽象的」な飛行方法を使用します。鳥の個々の種は飛ぶ方法を知っています (ペンギンでない限り - UnsupportedOperationException をスローします)。

1 つのモノリシックなソース ファイルを使用したいという衝動と戦うことを強くお勧めします。メソッドは 1 画面分より短く、クラスは 300 行より短くするようにしてください。

于 2011-02-22T20:07:41.757 に答える
6

Bozhoはキーワードの使用法をかなりうまくカバーしていますが、スコープをまったく宣言しない場合、スコープはpackage-privateになります。つまり、クラスと同じパッケージ内の誰もがそのクラス/メソッドを使用できます。 。基本的に、パッケージの外部からのアクセスを許可するためprivate、より寛容ですが、単なるより寛容ではありません。protectedprotected

ここでの「修飾子なし」アクセスに関する情報:

Javaチュートリアルを実行することをお勧めします。

また、Javaをさらに詳しく調べたい場合は、本の質問も参照してください。

于 2011-02-22T20:11:59.537 に答える
2

privatepublicおよびprotectedすべて変数のクラスのスコープを宣言するために使用されます。

static定義されているものがクラスのメンバーであり、クラスのインスタンスであるオブジェクトではないことを意味します。

abstractクラスを直接作成することはできず、サブクラスでのみ使用できることを意味します。抽象メソッドは抽象クラスで定義でき、定義された署名に一致するメソッドをサブクラスで定義する必要があることを意味します。

final変数は、その作成時に一度だけ変数に割り当てることができることを意味します。最終的なクラス/メソッドは、それぞれ継承/オーバーライドできません。

すべてを 1 つの大きなファイルにまとめることは避けてください。Eclipse などの IDE を使用すると、ファイルごとに 1 つのクラスを持つコードを簡単に操作できます。コードをより適切に整理し、コードをカプセル化できるため、すべてがすべてを知っているという状況に陥ることはありません。これにより、別の目的で作成されたものを誤って使用しやすくなるため、エラーが発生します。

于 2011-02-22T20:07:09.967 に答える
0

これらのキーワードがいつ/なぜ/どこで使用されるかを理解するには、オブジェクト指向プログラミングと Java のいくつかの重要な概念を把握する必要があります。EncapsulationPolymorphismを調べることをお勧めします。

また、頭の中で、「パブリック」は暗示されていると信じているため、必須ではありませんが、そこに置くことをお勧めします。

于 2011-02-22T20:05:57.067 に答える