私は、問題を解決するために、スーパークラス内のサブクラスのフィールドにアクセスすることについて先に投稿しました。しかし、彼らはそれが事実上不可能であることを明らかにした。だから私は私が達成したいものの少し例を作った:異なるタイプのアイテムをマップできるようにリストに配置
abstract class LotteryTicket(val numbers: String) {
val price: Int
}
//The numbers are different for each ticket and are used to denote a winner in the end.
class GoldTicket(numbers: String) extends LotteryTicket(person) {
val price: Int = 10
}
class SilverTicket(numbers: String) extends LotteryTicket(person) {
val price: Int = 5
}
abstract class Drink {
val price: Int
}
object Water extends Drink {
val price: Int = 1
}
object Coffee extends Drink {
val price: Int = 2
}
class Bill
class Customer
クラスのビルを「飲み物だけでなく、合計を算出することができるとお客様がに持っているLotteryTicketsを含むことができ、リストを含める必要がありますそのような法案を作ることができる。また、Customerクラスでは、購入を確認し、購入したTicketごとにLottoryTicketの番号が異なるかどうかを確認するメソッドが必要です。彼が2枚のチケットで同じ番号を持っているので、確認は失敗します。それは、簡単な方法で(コアコードを変更することなく)将来的に新しい食品(食品など)を追加することが可能でなければなりません。
あなたはいつも 'List [Any]'を作ることができますが、あなたはそれぞれの型のリストを持つか、リスト内の項目を同じスーパークラスから継承するようにコードを構造化しようとします( 'リスト[T <:CommonSuperClass] ') –
飲み物とチケットで延長されるスーパークラスの「アイテム」のような意味ですか? –
もちろん、「アイテム」から継承することが理にかなっている限り、リストがどのように使われるか、 'Drink'と' Ticket'が同じように使用されるかどうかを考えてみてください。 –