Концепция Scala UpperBound и LowerBound

Ниже приведен код, который я пытаюсь запустить:

class Student {
  def printDetails = println("I am a student")
  def printSomeOtherDetails = println("I love Studying")
}

class ComputerScienceStudent extends Student {
  override def printDetails = println("I am a Computer Science Student")
  override def printSomeOtherDetails = println("I love Scala")
}

class InformationTechnologyStudent extends Student {
  override def printDetails = println("I am an Information Technology Student")
  override def printSomeOtherDetails = println("I love Java")
}

class MyGenericClassForUpperBound {
  def printStudentDetails[S <: Student](student: S) = {
    student.printDetails
    student.printSomeOtherDetails
  }
}

class MyGenericClassforLowerBound {
  def printStudentDetails[S >: ComputerScienceStudent](student: S) = {
    student.printDetails
    student.printSomeOtherDetails
  }
}

методprintStudentDetails изMyGenericClassforLowerBound создает проблему. Заявленияstudent.printDetails а такжеstudent.printSomeOtherDetails говорят мне

value printDetails is not a member of type parameter S

Насколько я понял

Q[A <: B] означает класс / методQ может взять любые объекты классаA где классA это подтип классаB, Это называется Upper Bound.Q[A >: B] означает класс / методQ может брать любые объекты классаA где классA это супер тип классаB, Это называется нижней границей.

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

Ответы на вопрос(1)

Ваш ответ на вопрос