Class Outer
{
...
private class Node
{
private T data;
...
private T getData()
{
return data;
}
}
}
如果外部类可以访问内部类私有成员,那么使用set和get方法的目的是什么?将内部类私有化的目的是什么?包裹访问?
答案 0 :(得分:9)
当您不希望将类暴露给包内或包外的外部类时,将编写私有内部类。它们仅在外层级别中使用。
getter和setter在私有类中通常没有意义,因为无论如何都可以访问实例变量。
答案 1 :(得分:4)
你可以跳过琐碎的getter和setter,但这些方法通常都是非平凡的(常见的情况是'延迟加载'模式)。
编辑添加:延迟加载是指在请求数据时仅实例化成员。当获取数据并不总是需要并且获取数据昂贵时使用它。
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;
}
}
答案 2 :(得分:1)
首先,我会说对待内部public
/ protected
/ internal
类的方式与处理任何其他“外部”类的方式相同。意思是,使用相同的设计原则。
对于内部类,当我使用内部私有类时,它们通常最终只是一堆字节...意味着它们不进行实际处理。他们只是为了让外部类更容易编写代码。
我并没有告诉你编写错误的代码,但是你的内部私有类在你的设计中可能会更加松懈。作为一般规则,它们应该是简单和轻量级的......不要在内部类上过分使用OO。此外,如果您最终必须更改内部类中的任何内容,则只需更新外部类中的引用... TBH根本不是什么大问题。