9
Class Outer
{
 ...
    private class Node
    {
      private T data;
      ...

      private T getData()
      {
         return data;
      }
    }
}

外部クラスが内部クラスのプライベートメンバーにアクセスできる場合、setメソッドとgetメソッドを使用する目的は何ですか?内部クラスをプライベートにする目的は何ですか?パッケージへのアクセス?

4

3 に答える 3

11

Private Inner クラスは、クラスをパッケージ内またはパッケージ外の外部クラスに公開したくない場合に作成されます。これらは、外部レベル クラス内でのみ使用されます。

いずれにしてもインスタンス変数にアクセスできるため、getter と setter は通常、プライベート クラス内では意味がありません。

于 2010-05-09T05:34:04.797 に答える
4

些細なゲッターとセッターをスキップすることもできますが、多くの場合、これらのメソッドは自明ではありません(一般的なケースは「遅延読み込み」パターンです)。

追加のために編集:遅延読み込みとは、データが要求されたときにのみメンバーをインスタンス化する場合です。これは、データの取得が必ずしも必要ではなく、取得に費用がかかる場合に使用されます。

class a
{
private:
    int m_aNumber;
    bigDeal *m_pBig;

public:
    a() { m_aNumber = 0; m_pBig = NULL; }
    ~a() { if (m_pBig) delete m_pBig; }

    // trivial
    int get_aNumber() { return m_aNumber;}
    void set_aNumber(int val) { m_aNumber = val; }

    // lazy load
    bigDeal *get_Big()
    {
        if (m_pBig == NULL)
        {
            // bigDeal::bigDeal() downloads data from Mars Rover
            // takes 20 minutes, costs $1.2 million dollars to run
            m_pBig = new(bigDeal); 
        }
        return m_pBig;
    }
    void set_Big(bigDeal *val)
    {
        m_pBig = val;
    }
}
于 2010-05-09T05:23:46.500 に答える
1

まず第一に、内側の // クラスを、他の「外側の」クラスを扱うのと同じように扱うように言いたいとpublic思いprotectedますinternal。つまり、同じ設計原則を使用します。

内部クラスに関しては、私が内部プライベートクラスを使用している場合、それらは通常、単なるバイトのヒープになってしまいます...つまり、実際の処理は行われません。これらは、外部クラスのコードを簡単に記述できるようにするためのものです。

悪いコードを書くように言っているわけではありませんが、内部のプライベート クラスを使用すると、設計をもっと緩くすることができます。原則として、それらは単純で軽量であるべきです...内部クラスでオブジェクト指向に行き過ぎないでください。その上、内部クラスで何かを変更しなければならなくなった場合、外部クラスの参照を更新するだけで済みます... TBH はまったく大したことではありません。

于 2010-05-09T05:37:37.833 に答える