У меня есть объекты Sock и ChildSock, которые расширяют Sock.
class Sock
class ChildSock extends Sock
У меня также есть класс Human, который может «носить» тип Sock, и класс HumanChild, который расширяет класс Human, и есть метод износа, включающий ChildSock, который должен переопределить родительский метод износа.
class Human {
def wear(s: Sock) = println("Sock worn")
}
class HumanChild extends Human {
def wear(s: ChildSock) = println("Child sock worn")
}
Теперь, когда я пытаюсь запустить следующее,
val csock : ChildSock = new ChildSock
val h1: Human = new HumanChild
val h2: HumanChild = new HumanChild
h1.wear(csock)
h2.wear(csock)
я получаю следующие выходные данные :
> Sock Worn
> Child Sock Worn
Но я хочу, чтобы оба сообщения были "Child Sock Worn", поскольку объект csock - это дочерний носок. Но я могу изменить только код для класса HumanChild и ничего больше. Как я могу это сделать?
Что я уже пробовал:
Я попытался переопределить метод в классе HumanChild, как показано ниже:
class HumanChild extends Human {
def wear(s: ChildSock) = println("Child sock worn")
}
но он вернулся:
error: method accept overrides nothing.
Note: the super classes of class HumanChild contain the following, non final members named wear:
Так что я не слишком уверен, что делать.