Class Outer
{
...
private class Node
{
private T data;
...
private T getData()
{
return data;
}
}
}
如果外部类可以访问内部类私有成员,那么使用 set 和 get 方法的目的是什么?将内部类设为私有的目的是什么?包访问?
Class Outer
{
...
private class Node
{
private T data;
...
private T getData()
{
return data;
}
}
}
如果外部类可以访问内部类私有成员,那么使用 set 和 get 方法的目的是什么?将内部类设为私有的目的是什么?包访问?
当您不希望将类暴露给包内或包外的外部类时,会编写私有内部类。它们仅在外部级别类中使用。
getter 和 setter 通常在私有类中没有意义,因为无论如何您都可以访问实例变量。
您可以跳过微不足道的 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;
}
}
首先,我想说像对待任何其他“外部”类一样对待内部public
//类protected
。internal
意思是,使用相同的设计原则。
至于内部类,当我使用内部私有类时,它们通常最终只是一堆字节......这意味着它们不进行实际处理。它们只是为了让为外部类编写代码更容易。
我不是要你写不好的代码,但是你可以在你的设计中使用内部私有类更加松懈。作为一般规则,它们应该是简单和轻量级的......不要在内部类上过度使用 OO。此外,如果您最终不得不更改内部类中的任何内容,您只需要更新外部类中的引用......这 TBH 根本不是什么大问题。