Они принципиально разные? Исходя из вашего описания, это не похоже на это. Да, логически, то, как вы и я можем думать о кредитных и дебетовых картах, они принципиально различны.
Но вам нужно различать то, что, по вашему мнению, отличается в вашем уме, и как вы его физически используете и что вы Для того, чтобы ваша программа могла обрабатывать ее, необходимо смоделировать ее как другую, потому что это две разные вещи. Иногда идеи, которые представляют как то, как вы используете его, так и то, как ваша программа будет его использовать, совпадают, но не всегда.
В вашем случае вы описываете две вещи, которые могут иметь разные имена, но буквально одинаковы предмет. Если они имеют все одинаковые атрибуты, а определения функций абсолютно идентичны, то это один и тот же класс - зачем писать его дважды? Минимизируйте свою кодовую базу.
Тем не менее, создание отдельного класса для обоих тоже не плохо. Это поможет вам масштабировать ваш код позже.
abstract class Card {
UUID id;
BigDecimal limit;
BigDecimal currentAmount;
...
public void charge(BigDecimal amount) {
currentAmount = currentAmount.add(amount);
}
...
}
class DebitCard extends Card {}
class CreditCard extends Card{}
Так что ваш Card
класс содержит все логи c, а DebitCard
и CreditCard
оба являются абсолютно пустыми классами, наследуя все их поля и logi c из родительского класса, Card
. Преимущество здесь, опять же, масштабирование. Если позже вы определите, что CreditCard
нужно найти способ совершать ежемесячные платежи (не в вашем первоначальном описании), то вы можете добавить это позже, не оказывая негативного влияния на DebitCard
.