Я узнал о нижней и верхней границах в Scala.Я знаю, как обращаться с ними по отдельности, но что произойдет, если мы возьмем их вместе, скажем, A >: B <: C
Мой вопрос основан на этой проблеме:
trait Thing
class Vehicle extends Thing
class Car extends Vehicle
class Jeep extends Car
class Coupe extends Car
class Motorcycle extends Vehicle
class Bicycle extends Vehicle
class Tricycle extends Bicycle
и предположим, что мы объявляем
class Parking[A >: Bicycle <: Vehicle](val plaza: A)
Таким образом, из A>: Bicycle
мы можем сделать вывод, что A может иметь тип Bicycle, Vehicle и Thing, а из A<: Vehicle
мы можем сделать вывод, что A может иметь любой тип, кроме Thing
, поэтому из приведенного выше утверждения можно сделать вывод, что Aможет иметь только типы Bicycle, Vehicle и Thing с помощью свойства математического пересечения?Так что я нашел, что это работает, согласно принципу Лискова
new Parking(new Tricycle)
, но почему следующее также работает?
new Parking(new Coupe)
Я новичок в этом, поэтому, пожалуйста, помогите мне, а не отмечайте большедублируйте и закрывайте это.