JavaA2Z

KAB-studio > プログラミング > JavaA2Z > protectedフィールドとは

protectedフィールド

日本語 保護フィールド
英語 protected field
ふりがな ぷろてくてっどふぃーるど
フリガナ プロテクテッドフィールド

解説

protectedで修飾されたフィールド
protected フィールド;」のように、フィールド宣言の先頭にprotectedが付けられたフィールド
 
protectedフィールドは「パッケージの異なるクラスからアクセスすることができない」という制限が設けられている。ただし、パッケージが異なっていても「サブクラスからのアクセス」は許可されている。それ以外は、publicフィールドと同様。
サブクラスからアクセスできる」というメリットがあるため、「同クラスメソッドからアクセスするのと同じように、サブクラスからもアクセスしたい」場合にフィールドprotectedにする。
だが、これは単なる「見た目の利便性」だけである。「同パッケージからアクセスできる」「サブクラスからアクセスできる」点を考えると、publicフィールド並にセキュリティが甘いと考えるべきであり、protectedフィールドを作ることは推奨しない。フィールドは全てprivateフィールドとし、模試必要ならprotectedフィールドの代わりとしてprotectedメソッドgetter/setterを用意すればよい。

参考サイト

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

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

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

// Sample.java
// testパッケージのOtherPackageClassクラスを使用します。
import test.OtherPackageClass;

public class Sample
{
    public static void main( String[] args )
    {
        // 同パッケージのクラスの場合。
        NormalClass normalClass = new NormalClass();
        // protectedフィールドを別クラスからアクセスします。
        normalClass.data = 100;
        System.out.println( normalClass.data );
        // 100
        // このように、普通にアクセスできます。

        // 他のパッケージのクラスの場合。
        OtherPackageClass otherPackageClass = new OtherPackageClass();
        // otherPackageClass.data = 100;
        // コンパイルエラー:
        // フィールド otherPackageClass.data は不可視です。

        // サブクラスを使用します。
        ExtendedOtherPackageClass extendedOtherPackageClass = new ExtendedOtherPackageClass();
        extendedOtherPackageClass.setData( 200 );
        System.out.println( extendedOtherPackageClass.getData() );
        // 200
        // このように、サブクラスのメソッドからはアクセスできます。
    }
}

/**
*   フツーのクラス。
*/
class NormalClass
{
    /**
    *    protectedフィールド。
    */
    protected int data;
}

/**
*   OtherPackageClassのサブクラス。
*/
class ExtendedOtherPackageClass extends OtherPackageClass
{
    /**
    *    setter
    */
    protected void setData( int i )
    {
        // スーパークラスOtherPackageClassの
        // dataフィールドに値をセットします。
        data = i;
    }

    /**
    *    getter
    */
    protected int getData()
    {
        // スーパークラスOtherPackageClassの
        // dataフィールドから値を取得します。
        return data;
    }
}


// test/OtherPackageClass.java
package test;

/**
*   フツーのクラス。
*/
public class OtherPackageClass
{
    /**
    *    protectedフィールド。
    */
    protected int data;
}
// Sample.java
// testパッケージのOtherPackageClassクラスを使用します。
import test.OtherPackageClass;

public class Sample
{
    public static void main( String[] args )
    {
        // 同パッケージのクラスの場合。
        NormalClass normalClass = new NormalClass();
        // protectedフィールドを別クラスからアクセスします。
        normalClass.data = 100;
        System.out.println( normalClass.data );
        // 100
        // このように、普通にアクセスできます。

        // 他のパッケージのクラスの場合。
        OtherPackageClass otherPackageClass = new OtherPackageClass();
        // otherPackageClass.data = 100;
        // コンパイルエラー:
        // フィールド otherPackageClass.data は不可視です。

        // サブクラスを使用します。
        ExtendedOtherPackageClass extendedOtherPackageClass = new ExtendedOtherPackageClass();
        extendedOtherPackageClass.setData( 200 );
        System.out.println( extendedOtherPackageClass.getData() );
        // 200
        // このように、サブクラスのメソッドからはアクセスできます。
    }
}

/**
*   フツーのクラス。
*/
class NormalClass
{
    /**
    *    protectedフィールド。
    */
    protected int data;
}

/**
*   OtherPackageClassのサブクラス。
*/
class ExtendedOtherPackageClass extends OtherPackageClass
{
    /**
    *    setter
    */
    protected void setData( int i )
    {
        // スーパークラスOtherPackageClassの
        // dataフィールドに値をセットします。
        data = i;
    }

    /**
    *    getter
    */
    protected int getData()
    {
        // スーパークラスOtherPackageClassの
        // dataフィールドから値を取得します。
        return data;
    }
}


// test/OtherPackageClass.java
package test;

/**
*   フツーのクラス。
*/
public class OtherPackageClass
{
    /**
    *    protectedフィールド。
    */
    protected int data;
}

この単語を含むページ

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

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

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