privateメソッド
| 日本語 | 隠蔽メソッド |
| 英語 | private method |
| ふりがな | ぷらいべーとめそっど |
| フリガナ | プライベートメソッド |
privateで修飾されたメソッド。
「private 戻り値 メソッド名(引数){ 実装 }」のように、メソッドの宣言の先頭にprivateが付けられたメソッド。
privateメソッドは「自分のクラスのメソッド以外からはアクセスできない」ようになる。
外から呼び出されないことで、メソッドの呼び出し方法を管理することができる。「特別に内部の処理を行うため、外から呼び出されると内部状態に問題が生じる」、「適切な順番で呼ばなければならない」、「引数にクセがあり外から直接呼び出すのには適さない」といったメソッドに使用する。
「自分で作って自分で使うから問題ない」とは思わないこと。忘れてしまった頃に修正する場合や、自分以外の人間が修正する場合もあるため、privateメソッドにすべきメソッドは、たとえ「気を付けているから大丈夫」だとしてもprivateメソッドにした方が良いだろう。
「private 戻り値 メソッド名(引数){ 実装 }」のように、メソッドの宣言の先頭にprivateが付けられたメソッド。
privateメソッドは「自分のクラスのメソッド以外からはアクセスできない」ようになる。
外から呼び出されないことで、メソッドの呼び出し方法を管理することができる。「特別に内部の処理を行うため、外から呼び出されると内部状態に問題が生じる」、「適切な順番で呼ばなければならない」、「引数にクセがあり外から直接呼び出すのには適さない」といったメソッドに使用する。
「自分で作って自分で使うから問題ない」とは思わないこと。忘れてしまった頃に修正する場合や、自分以外の人間が修正する場合もあるため、privateメソッドにすべきメソッドは、たとえ「気を付けているから大丈夫」だとしてもprivateメソッドにした方が良いだろう。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
NormalClass normalClass = new NormalClass();
// privateメソッドを、publicメソッドを経由して
// 呼び出します。
normalClass.publicMethod();
// NormalClass#publicMethod()
// NormalClass#privateMethod()
// privateメソッドをクラスの外から呼び出すことは
// できません。
// normalClass.privateMethod();
// コンパイルエラー:
// メソッド privateMethod() は型 NormalClass で不可視です。
// サブクラスの方を使ってみます。
SubNormalClass subNormalClass = new SubNormalClass();
// privateメソッドを、publicメソッドを経由して
// 呼び出します。
subNormalClass.publicMethod();
// NormalClass#publicMethod()
// NormalClass#privateMethod()
// このように、privateメソッドは、オーバーライドしても
// ポリモーフィズムの対象にはなりません。なので、実質
// オーバーライドできないと言えます。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* privateなメソッド。
*/
private void privateMethod()
{
System.out.println( "NormalClass#privateMethod()" );
}
/**
* publicなメソッド。
*/
public void publicMethod()
{
System.out.println( "NormalClass#publicMethod()" );
// privateメソッドを呼び出します。
// 同じクラスなので呼び出せます。
privateMethod();
}
/**
* 自分のクラスを使うクラス。
*/
public void callPrivateMethod()
{
NormalClass normalClass = new NormalClass();
// privateは「自分のクラス以外のメソッドからはアクセスできない」
// という意味です。
// 決して「自分のクラスの外からアクセスできない」
// という意味ではありません。
// だから、こんなこともできます。
normalClass.privateMethod();
// privateMethod()メソッドはprivateメソッドなので
// 一見このような形式では呼べなさそうですが、
// callPrivateMethod()メソッドがNormalClassクラスのメソッドなので
// 呼び出すことができます。
}
}
/**
* NormalClassのサブクラス。
*/
class SubNormalClass extends NormalClass
{
/**
* privateなメソッドをオーバーライドします。
*/
private void privateMethod()
{
System.out.println( "ExtendedNormalClass#privateMethod()" );
}
}
public class Sample
{
public static void main( String[] args )
{
NormalClass normalClass = new NormalClass();
// privateメソッドを、publicメソッドを経由して
// 呼び出します。
normalClass.publicMethod();
// NormalClass#publicMethod()
// NormalClass#privateMethod()
// privateメソッドをクラスの外から呼び出すことは
// できません。
// normalClass.privateMethod();
// コンパイルエラー:
// メソッド privateMethod() は型 NormalClass で不可視です。
// サブクラスの方を使ってみます。
SubNormalClass subNormalClass = new SubNormalClass();
// privateメソッドを、publicメソッドを経由して
// 呼び出します。
subNormalClass.publicMethod();
// NormalClass#publicMethod()
// NormalClass#privateMethod()
// このように、privateメソッドは、オーバーライドしても
// ポリモーフィズムの対象にはなりません。なので、実質
// オーバーライドできないと言えます。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* privateなメソッド。
*/
private void privateMethod()
{
System.out.println( "NormalClass#privateMethod()" );
}
/**
* publicなメソッド。
*/
public void publicMethod()
{
System.out.println( "NormalClass#publicMethod()" );
// privateメソッドを呼び出します。
// 同じクラスなので呼び出せます。
privateMethod();
}
/**
* 自分のクラスを使うクラス。
*/
public void callPrivateMethod()
{
NormalClass normalClass = new NormalClass();
// privateは「自分のクラス以外のメソッドからはアクセスできない」
// という意味です。
// 決して「自分のクラスの外からアクセスできない」
// という意味ではありません。
// だから、こんなこともできます。
normalClass.privateMethod();
// privateMethod()メソッドはprivateメソッドなので
// 一見このような形式では呼べなさそうですが、
// callPrivateMethod()メソッドがNormalClassクラスのメソッドなので
// 呼び出すことができます。
}
}
/**
* NormalClassのサブクラス。
*/
class SubNormalClass extends NormalClass
{
/**
* privateなメソッドをオーバーライドします。
*/
private void privateMethod()
{
System.out.println( "ExtendedNormalClass#privateMethod()" );
}
}
// Sample.java
public class Sample
{
public static void main( String[] args )
{
NormalClass normalClass = new NormalClass();
// privateメソッドを、publicメソッドを経由して
// 呼び出します。
normalClass.publicMethod();
// NormalClass#publicMethod()
// NormalClass#privateMethod()
// privateメソッドをクラスの外から呼び出すことは
// できません。
// normalClass.privateMethod();
// コンパイルエラー:
// メソッド privateMethod() は型 NormalClass で不可視です。
// サブクラスの方を使ってみます。
SubNormalClass subNormalClass = new SubNormalClass();
// privateメソッドを、publicメソッドを経由して
// 呼び出します。
subNormalClass.publicMethod();
// NormalClass#publicMethod()
// NormalClass#privateMethod()
// このように、privateメソッドは、オーバーライドしても
// ポリモーフィズムの対象にはなりません。なので、実質
// オーバーライドできないと言えます。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* privateなメソッド。
*/
private void privateMethod()
{
System.out.println( "NormalClass#privateMethod()" );
}
/**
* publicなメソッド。
*/
public void publicMethod()
{
System.out.println( "NormalClass#publicMethod()" );
// privateメソッドを呼び出します。
// 同じクラスなので呼び出せます。
privateMethod();
}
/**
* 自分のクラスを使うクラス。
*/
public void callPrivateMethod()
{
NormalClass normalClass = new NormalClass();
// privateは「自分のクラス以外のメソッドからはアクセスできない」
// という意味です。
// 決して「自分のクラスの外からアクセスできない」
// という意味ではありません。
// だから、こんなこともできます。
normalClass.privateMethod();
// privateMethod()メソッドはprivateメソッドなので
// 一見このような形式では呼べなさそうですが、
// callPrivateMethod()メソッドがNormalClassクラスのメソッドなので
// 呼び出すことができます。
}
}
/**
* NormalClassのサブクラス。
*/
class SubNormalClass extends NormalClass
{
/**
* privateなメソッドをオーバーライドします。
*/
private void privateMethod()
{
System.out.println( "ExtendedNormalClass#privateMethod()" );
}
}




