Как инициализировать свойства родительского класса с другим значением, чем у дочернего - PullRequest
0 голосов
/ 18 июня 2019

У меня ниже иерархии классов

class Category{
  protected int _discount;
}

class SubCategory:Category{
  // some other properties
}

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

Когда я инициализирую Item с кодом ниже Предмет = новый предмет (10); Это установит _discount как 10 для класса Item. Я также хочу установить _discount для класса SubCategory и Category с другим значением. Один из способов - передать 3 разных значения скидок в конструкторе Item и назначить их родителям соответствующим образом.

Другой способ, которым я могу это сделать, - это предоставить методы класса Item для явной установки значений свойств в базовых классах.

Есть ли какое-либо другое решение, наиболее подходящее для концепции ООП? Где-то мне не очень комфортно с тем, что я здесь делаю.

1 Ответ

2 голосов
/ 18 июня 2019

Переменная _discount не имеет области видимости, поэтому она неявно private. Вы должны сделать его доступным для производного класса, в этом случае вы, вероятно, захотите, чтобы он был protected, который определяется как (выделение мое):

Защищенный член доступен в своем классе и экземплярами производного класса .

Что означает, что ваш код будет:

public class Category
{
  protected int _discount;
}

Примечание. Это очень хороший пример того, почему всегда следует указывать область действия для всех вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...