Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのprotectedとデフォルトアクセス修飾子の違いを徹底解説


Javaにおけるprotectedアクセス修飾子は、同じパッケージ内で可視であることに加え、サブクラスからもアクセス可能です。一方、デフォルト(修飾子なし)パッケージレベルのアクセス修飾子であり、同じパッケージ内でのみ可視となります。

protectedアクセス修飾子とは

  • protectedは、同じパッケージ内ではpublicのように振る舞い、パッケージ外ではprivateのように振る舞います。
  • protectedは、サブクラスのオブジェクトに対しては、パッケージ外でもpublicのように振る舞います。
  • protectedは、トップレベルのクラスやインターフェースには適用できません。
  • スーパークラスでprotectedとして宣言されたフィールド、メソッド、コンストラクタは、他のパッケージからはサブクラスによってのみアクセスできます。
  • 同じパッケージ内のクラスは、protectedメンバーを持つクラスのサブクラスでなくても、そのフィールド、メソッド、コンストラクタにアクセスできます。

コード例

public class ProtectedTest {    // protected変数    protected int age = 30;    protected String name = "Adithya";    /**     * このメソッドはprotectedとして宣言されています。     */    protected String getInfo() {        return name + " is " + age + " years old.";    }    public static void main(String[] args) {        System.out.println(new ProtectedTest().getInfo());    }}

実行結果

Adithya is 30 years old.

デフォルト(パッケージプライベート)アクセス修飾子とは

  • クラスのメンバーをアクセス修飾子なしで宣言した場合、それはデフォルトとして扱われます。
  • デフォルトは、同じパッケージ内ではpublicのように振る舞い、パッケージ外ではprivateのように振る舞います。
  • クラスのデフォルトメンバーは、同じパッケージ内のどこからでも利用できますが、いかなる条件でもパッケージ外からは利用できません。
  • デフォルトはアクセスをパッケージレベルのみに制限するため、デフォルトのデータメンバーを持つクラスを継承しても、パッケージ外からはそれらのメンバーにアクセスできません。

コード例

public class DefaultTest {    // アクセス修飾子なしの変数    int age = 25;    String name = "Jai";    /**     * このメソッドはデフォルトアクセス修飾子で宣言されています。     */    String getInfo() {        return name + " is " + age + " years old.";    }    public static void main(String[] args) {        System.out.println(new DefaultTest().getInfo());    }}

実行結果

Jai is 25 years old.

まとめ:protectedは「同一パッケージ+サブクラス」まで可視範囲を広げられるのに対し、デフォルトは同一パッケージ内に限定されます。継承を前提とした拡張性のある設計にはprotectedを、パッケージ内部だけで完結する実装にはデフォルトを選ぶとよいでしょう。

  1. JavaのJFrameとJDialogの違いとは?特徴と使い分けを解説

    JavaのSwingには、ウィンドウを表示するためのトップレベルコンテナとしてJFrameとJDialogが用意されています。どちらもよく似た役割を持ちますが、動作や用途には重要な違いがあります。この記事では、それぞれの特徴をサンプルコードとともに解説し、最後に使い分けのポイントをまとめます。 JFrameとは フレームに追加されたコンポーネントは「コンテンツ」として扱われ、contentPaneによって管理されます。JFrameにコンポーネントを追加する際は、フレーム本体ではなくcontentPaneに対して追加する必要があります。 JFrameは、タイトル、境界線、(オプションで)メニュ

  2. JavaのGridLayoutとGridBagLayoutの違いを徹底解説!特徴と使い分けのポイント

    JavaのAWT/Swingには複数のレイアウトマネージャーが用意されていますが、その中でもGridLayoutとGridBagLayoutは、コンポーネントを格子状(グリッド)に配置するという点でよく似ています。しかし、両者には重要な違いがあります。 GridLayoutは、すべてのコンポーネントを矩形のグリッド内に配置し、領域を同じサイズの長方形に分割して、各コンポーネントをそれぞれのセルの中に収めます。一方、GridBagLayoutは柔軟性の高いレイアウトマネージャーであり、コンポーネントのサイズを揃えることなく、縦方向・横方向に整列させて配置できます。各GridBagLayoutオブ