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()" ); } }