JavaA2Z

KAB-studio > プログラミング > JavaA2Z > privateメソッドとは

privateメソッド

日本語 隠蔽メソッド
英語 private method
ふりがな ぷらいべーとめそっど
フリガナ プライベートメソッド

解説

privateで修飾されたメソッド
private 戻り値 メソッド(引数){ 実装 }」のように、メソッド宣言の先頭にprivateが付けられたメソッド
privateメソッドは「自分のクラスメソッド以外からはアクセスできない」ようになる。
外から呼び出されないことで、メソッド呼び出し方法を管理することができる。「特別に内部の処理をうため、外から呼び出されると内部状態に問題が生じる」、「適切な順番で呼ばなければならない」、「引数にクセがあり外から直接呼び出すのには適さない」といったメソッドに使用する。
「自分で作って自分で使うから問題ない」とは思わないこと。忘れてしまった頃に修正する場合や、自分以外の人間が修正する場合もあるため、privateメソッドにすべきメソッドは、たとえ「気を付けているから大丈夫」だとしてもprivateメソッドにした方が良いだろう。

参考サイト

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

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

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

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

この単語を含むページ

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

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

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