如何使用与 child 值不同的值初始化父类的属性



我有下面的类层次结构

class Category{
  protected int _discount;
}
class SubCategory:Category{
  // some other properties
}
class Item:SubCategory{
  // some more properties
 public Item (int discount){
  _discount = discount;
 } 
}

当我使用以下代码初始化项目 项目项 = 新项 (10(;它将项目类的_discount设置为 10。我还想为子类别和类别类设置具有不同值的_discount。一种方法是在 Item 构造函数中传递 3 个不同的折扣值,并相应地分配给父项。

我可以做的另一种方法是在 Item 类中公开方法以显式设置基类中的属性值。

是否有其他解决方案最适合 OOP 概念。在某个地方,我对我在这里所做的事情不是很舒服。

_discount 变量没有作用域,因此隐式private。您需要使派生类可以访问它,在这种情况下,您可能希望它被protected定义为(强调我的(:

受保护的成员可以在其类中访问,也可以由派生类实例访问

这意味着您的代码将是:

public class Category
{
  protected int _discount;
}

注意:这是一个很好的例子,说明为什么您应该始终在所有事物上指定范围。

最新更新