JavaA2Z

KAB-studio > プログラミング > JavaA2Z > アクセスコントロールとは

アクセスコントロール

日本語 使用制限
英語 access control
ふりがな あくせすこんとろーる
フリガナ アクセスコントロール

解説

クラスメソッドフィールドについて、「どこから使用できるか」を制限すること。
 
それぞれのクラスメソッドフィールドの「使用範囲」を決めることで「して欲しくない処理をされる」ことを防ぐことができる。
public private protectedといったアクセス修飾子を使用するか、もしくは何も修飾しないこと(「無印」、「デフォルト」)で「使用範囲」が決定される。
アクセスコントロールを適切にうことでプログラムを安全にすることができる。ただし、場合によっては修正が難しくなる等、適切な使用が求められる難しい機能でもある。
詳しくは以下のアクセス修飾子参照
 
public
無印
protected
private
 
また、同じアクセス修飾子でも、修飾する対象によって挙動が異なる。
各対象については以下を参照
 
publicクラス
無印クラス
protectedクラス
privateクラス
 
publicフィールド
無印フィールド
protectedフィールド
privateフィールド
 
publicメソッド
無印メソッド
protectedメソッド
privateメソッド
 
基本的には、クラスpublicフィールドprivateメソッドpublic時々protectedprivate無印は使用しない、と使い分ければいいだろう。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// この例では、testパッケージのTestPackageClassクラスの
// フィールドを対象に、どこからアクセスできるのかを説明します。

// test/OtherPackageClass.java
package test;

/**
*   testパッケージのクラス。
*/
public class TestPackageClass
{
    // publicフィールド。
    public int publicField = 0;
    // 無印(デフォルト)フィールド。
           int defaultField = 0;
    // protectedフィールド。
    protected int protectedField = 0;
    // privateフィールド。
    private int privateField = 0;

    // TestPackageClassクラスのメソッド。
    public void useField()
    {
        // 同じクラスからは、全てアクセスできます。
        publicField = 0;
        defaultField = 0;
        protectedField = 0;
        privateField = 0;
    }
}

/**
*   TestPackageClassクラスの、同じパッケージの別クラス。
*/
class SamePackageClass
{
    // TestPackageClassクラスのフィールドを使用するメソッド。
    public void useTestPackageClasssField()
    {
        TestPackageClass testPackageClass = new TestPackageClass();

        // 同じパッケージの別クラスからは、
        // private以外全てアクセスできます。
        testPackageClass.publicField = 0;
        testPackageClass.defaultField = 0;
        testPackageClass.protectedField = 0;
        // testPackageClass.privateField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.privateField は不可視です。
    }
}


// Sample.java
/**
*   TestPackageClassクラスの、別パッケージの別クラス。
*/
public class Sample
{
    // Sampleクラスのメソッド。
    public static void main( String[] args )
    {
        test.TestPackageClass testPackageClass = new test.TestPackageClass();

        // 別パッケージの別クラスからは、
        // publicのみアクセスできます。
        testPackageClass.publicField = 0;
        // testPackageClass.defaultField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.defaultField は不可視です。
        // testPackageClass.protectedField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.protectedField は不可視です
        // testPackageClass.privateField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.privateField は不可視です。
    }
}

/**
*   TestPackageClassクラスの、別パッケージの別クラス。
*   ただしTestPackageClassクラスのサブクラスです。
*/
class SamePackageClass extends test.TestPackageClass
{
    // TestPackageClassクラスのフィールドを使用するメソッド。
    public void useTestPackageClassField()
    {
        // サブクラスからは、publicとprotectedのみ
        // アクセスできます。
        publicField = 0;
        // defaultField = 0;
        // コンパイルエラー:
        // フィールド defaultField は不可視です。
        protectedField = 0;
        // privateField = 0;
        // コンパイルエラー:
        // フィールド sample.privateField は不可視です。
    }
}
// この例では、testパッケージのTestPackageClassクラスの
// フィールドを対象に、どこからアクセスできるのかを説明します。

// test/OtherPackageClass.java
package test;

/**
*   testパッケージのクラス。
*/
public class TestPackageClass
{
    // publicフィールド。
    public int publicField = 0;
    // 無印(デフォルト)フィールド。
           int defaultField = 0;
    // protectedフィールド。
    protected int protectedField = 0;
    // privateフィールド。
    private int privateField = 0;

    // TestPackageClassクラスのメソッド。
    public void useField()
    {
        // 同じクラスからは、全てアクセスできます。
        publicField = 0;
        defaultField = 0;
        protectedField = 0;
        privateField = 0;
    }
}

/**
*   TestPackageClassクラスの、同じパッケージの別クラス。
*/
class SamePackageClass
{
    // TestPackageClassクラスのフィールドを使用するメソッド。
    public void useTestPackageClasssField()
    {
        TestPackageClass testPackageClass = new TestPackageClass();

        // 同じパッケージの別クラスからは、
        // private以外全てアクセスできます。
        testPackageClass.publicField = 0;
        testPackageClass.defaultField = 0;
        testPackageClass.protectedField = 0;
        // testPackageClass.privateField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.privateField は不可視です。
    }
}


// Sample.java
/**
*   TestPackageClassクラスの、別パッケージの別クラス。
*/
public class Sample
{
    // Sampleクラスのメソッド。
    public static void main( String[] args )
    {
        test.TestPackageClass testPackageClass = new test.TestPackageClass();

        // 別パッケージの別クラスからは、
        // publicのみアクセスできます。
        testPackageClass.publicField = 0;
        // testPackageClass.defaultField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.defaultField は不可視です。
        // testPackageClass.protectedField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.protectedField は不可視です
        // testPackageClass.privateField = 0;
        // コンパイルエラー:
        // フィールド testPackageClass.privateField は不可視です。
    }
}

/**
*   TestPackageClassクラスの、別パッケージの別クラス。
*   ただしTestPackageClassクラスのサブクラスです。
*/
class SamePackageClass extends test.TestPackageClass
{
    // TestPackageClassクラスのフィールドを使用するメソッド。
    public void useTestPackageClassField()
    {
        // サブクラスからは、publicとprotectedのみ
        // アクセスできます。
        publicField = 0;
        // defaultField = 0;
        // コンパイルエラー:
        // フィールド defaultField は不可視です。
        protectedField = 0;
        // privateField = 0;
        // コンパイルエラー:
        // フィールド sample.privateField は不可視です。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/02/01
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。