privateフィールド
日本語 | 隠蔽フィールド |
英語 | private field |
ふりがな | ぷらいべーとふぃーるど |
フリガナ | プライベートフィールド |
privateで修飾されたフィールド。
「private 型 フィールド名;」のように、フィールドの宣言の先頭にprivateが付けられたフィールド。
privateフィールドは「自分のクラスのメソッド以外からはアクセスできない」ようになる。
基本的に、フィールドは特別な場合を除き全てprivateにし、外のクラスからは直接アクセスできないようにする。そして、フィールドへのアクセスはgetter/setterを通して行うようにする。
フィールドへのアクセスにgetter/setterを使用することで、「フィールドへのアクセスの監視」「フィールドの入出力時に必要な処理の追加」が行えるようになり、外部からの不作法なアクセスを回避することができる。
「自分で作って自分で使うから問題ない」とは思わないこと。privateにして「禁止」しておかないと、故意にせよ無意識にせよ利用してしまうものである。たとえ「気を付けているから大丈夫」だと考えていても、フィールドはprivateにするべきである。
「private 型 フィールド名;」のように、フィールドの宣言の先頭にprivateが付けられたフィールド。
privateフィールドは「自分のクラスのメソッド以外からはアクセスできない」ようになる。
基本的に、フィールドは特別な場合を除き全てprivateにし、外のクラスからは直接アクセスできないようにする。そして、フィールドへのアクセスはgetter/setterを通して行うようにする。
フィールドへのアクセスにgetter/setterを使用することで、「フィールドへのアクセスの監視」「フィールドの入出力時に必要な処理の追加」が行えるようになり、外部からの不作法なアクセスを回避することができる。
「自分で作って自分で使うから問題ない」とは思わないこと。privateにして「禁止」しておかないと、故意にせよ無意識にせよ利用してしまうものである。たとえ「気を付けているから大丈夫」だと考えていても、フィールドはprivateにするべきである。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
NormalClass normalClass = new NormalClass();
// privateフィールドを、publicメソッドを経由して
// アクセスします。
normalClass.setData( 100 );
System.out.println( normalClass.getData() );
// 100
// privateフィールドをクラスの外から呼び出すことは
// できません。
// System.out.println( normalClass.data );
// コンパイルエラー:
// フィールド normalClass.data は不可視です。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* privateなフィールド。
*/
private int data;
/**
* getter。
*/
public int getData()
{
return data;
}
/**
* setter。
*/
public void setData( int value )
{
this.data = value;
}
/**
* 自分のクラスを使うクラス。
*/
public void callPrivateMethod()
{
NormalClass normalClass = new NormalClass();
// privateは「自分のクラス以外のメソッドからはアクセスできない」
// という意味です。
// 決して「自分のクラスの外からアクセスできない」
// という意味ではありません。
// だから、こんなこともできます。
System.out.println( normalClass.data );
// dataフィールドはprivateフィールドなので
// 一見このような形式では呼べなさそうですが、
// callPrivateMethod()メソッドがNormalClassクラスのメソッドなので
// 呼び出すことができます。
}
}
public class Sample
{
public static void main( String[] args )
{
NormalClass normalClass = new NormalClass();
// privateフィールドを、publicメソッドを経由して
// アクセスします。
normalClass.setData( 100 );
System.out.println( normalClass.getData() );
// 100
// privateフィールドをクラスの外から呼び出すことは
// できません。
// System.out.println( normalClass.data );
// コンパイルエラー:
// フィールド normalClass.data は不可視です。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* privateなフィールド。
*/
private int data;
/**
* getter。
*/
public int getData()
{
return data;
}
/**
* setter。
*/
public void setData( int value )
{
this.data = value;
}
/**
* 自分のクラスを使うクラス。
*/
public void callPrivateMethod()
{
NormalClass normalClass = new NormalClass();
// privateは「自分のクラス以外のメソッドからはアクセスできない」
// という意味です。
// 決して「自分のクラスの外からアクセスできない」
// という意味ではありません。
// だから、こんなこともできます。
System.out.println( normalClass.data );
// dataフィールドはprivateフィールドなので
// 一見このような形式では呼べなさそうですが、
// callPrivateMethod()メソッドがNormalClassクラスのメソッドなので
// 呼び出すことができます。
}
}
// Sample.java public class Sample { public static void main( String[] args ) { NormalClass normalClass = new NormalClass(); // privateフィールドを、publicメソッドを経由して // アクセスします。 normalClass.setData( 100 ); System.out.println( normalClass.getData() ); // 100 // privateフィールドをクラスの外から呼び出すことは // できません。 // System.out.println( normalClass.data ); // コンパイルエラー: // フィールド normalClass.data は不可視です。 } } /** * フツーのクラス。 */ class NormalClass { /** * privateなフィールド。 */ private int data; /** * getter。 */ public int getData() { return data; } /** * setter。 */ public void setData( int value ) { this.data = value; } /** * 自分のクラスを使うクラス。 */ public void callPrivateMethod() { NormalClass normalClass = new NormalClass(); // privateは「自分のクラス以外のメソッドからはアクセスできない」 // という意味です。 // 決して「自分のクラスの外からアクセスできない」 // という意味ではありません。 // だから、こんなこともできます。 System.out.println( normalClass.data ); // dataフィールドはprivateフィールドなので // 一見このような形式では呼べなさそうですが、 // callPrivateMethod()メソッドがNormalClassクラスのメソッドなので // 呼び出すことができます。 } }