Машинописный доступ защищен - PullRequest
0 голосов
/ 01 марта 2020

У меня есть несколько классов.

class Money {
   protected amount: number
   public equals(object: Object): boolean {
       const money: Money = object as Money;
       return this.amount === **money.amount** //<- i wants write like this
   }
}
class Dollar extends Money {
   constructor(amount: number){
       super();
       this.amount = amount;
   }
}

и использование

new Dollar(5).equals(new Dollars(5));

, но я не могу получить доступ к классу Money money.amount

, а затем попробовал как это

class Money {
   protected amount: number;
   getAmount(): number {
       return this.amount;
   }
   public equals(object: Object): boolean {
       const money: Money = object as Money;
       return this.amount === money.getAmount(); // tried
   }
}

Или в классе Money удалите защищенный суффикс.

Это работает, но я чувствую, что это не круто.

Как я могу решить эту проблему как java?

1 Ответ

1 голос
/ 01 марта 2020

Поскольку вы использовали модификатор protected, свойство amount разрешено получать только внутренним экземплярам класса Money и недоступно для объектов класса Money.

Использование object as Money рассматривает объект как объект * publi c Money, а не внутренний. Вместо этого вы должны проверить, является ли object экземпляром Money первым.

class Money {
    protected amount: number = 0;
    public equals(other: any): boolean {
        if (!(other instanceof Money)) return false; // not a Money derivative thus not equal
        return this.amount === other.amount; // "other" is now considered an instance of Money by the compiler/linter by process of elimination
    }
}
class Dollar extends Money {
    constructor(amount: number){
        super();
        this.amount = amount;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...